From 45db7d21b2a0a18b73253c64651a57c60880b084 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 31 Aug 2014 15:15:33 -0400 Subject: [PATCH] localize plugin installation process --- .../Playback/Hls/VideoHlsService.cs | 8 ++ MediaBrowser.Api/System/SystemService.cs | 21 +++- ...MediaBrowser.Common.Implementations.csproj | 1 + .../Security/MBLicenseFile.cs | 61 ++++++--- .../Security/PluginSecurityManager.cs | 74 +++++++++-- .../Security/SuppporterInfoResponse.cs | 14 +++ .../Security/ISecurityManager.cs | 6 + .../Net/AuthenticatedAttribute.cs | 8 +- MediaBrowser.Controller/Net/IAuthService.cs | 2 +- .../Entities/MBRegistrationRecord.cs | 32 +++-- .../EntryPoints/LoadRegistrations.cs | 16 ++- .../HttpServer/HttpListenerHost.cs | 14 ++- .../HttpServer/IHttpListener.cs | 2 - .../NetListener/HttpListenerServer.cs | 23 ++-- .../HttpServer/Security/AuthService.cs | 42 ++----- .../SocketSharp/WebSocketSharpListener.cs | 13 +- .../Localization/JavaScript/ar.json | 11 +- .../Localization/JavaScript/ca.json | 11 +- .../Localization/JavaScript/cs.json | 11 +- .../Localization/JavaScript/da.json | 11 +- .../Localization/JavaScript/de.json | 11 +- .../Localization/JavaScript/el.json | 11 +- .../Localization/JavaScript/en_GB.json | 11 +- .../Localization/JavaScript/en_US.json | 11 +- .../Localization/JavaScript/es.json | 11 +- .../Localization/JavaScript/es_MX.json | 11 +- .../Localization/JavaScript/fr.json | 11 +- .../Localization/JavaScript/he.json | 11 +- .../Localization/JavaScript/it.json | 11 +- .../Localization/JavaScript/javascript.json | 117 ++++++++++-------- .../Localization/JavaScript/kk.json | 29 +++-- .../Localization/JavaScript/ms.json | 11 +- .../Localization/JavaScript/nb.json | 11 +- .../Localization/JavaScript/nl.json | 11 +- .../Localization/JavaScript/pl.json | 11 +- .../Localization/JavaScript/pt_BR.json | 15 ++- .../Localization/JavaScript/pt_PT.json | 11 +- .../Localization/JavaScript/ru.json | 15 ++- .../Localization/JavaScript/sv.json | 11 +- .../Localization/JavaScript/tr.json | 11 +- .../Localization/JavaScript/vi.json | 11 +- .../Localization/JavaScript/zh_TW.json | 11 +- .../Localization/Server/ar.json | 10 ++ .../Localization/Server/ca.json | 10 ++ .../Localization/Server/da.json | 10 ++ .../Localization/Server/de.json | 20 ++- .../Localization/Server/el.json | 10 ++ .../Localization/Server/en_GB.json | 10 ++ .../Localization/Server/en_US.json | 10 ++ .../Localization/Server/es.json | 10 ++ .../Localization/Server/es_MX.json | 24 ++-- .../Localization/Server/fr.json | 10 ++ .../Localization/Server/he.json | 10 ++ .../Localization/Server/it.json | 10 ++ .../Localization/Server/kk.json | 50 +++++--- .../Localization/Server/ko.json | 10 ++ .../Localization/Server/ms.json | 10 ++ .../Localization/Server/nb.json | 10 ++ .../Localization/Server/nl.json | 42 ++++--- .../Localization/Server/pl.json | 10 ++ .../Localization/Server/pt_BR.json | 28 +++-- .../Localization/Server/pt_PT.json | 10 ++ .../Localization/Server/ru.json | 46 ++++--- .../Localization/Server/server.json | 12 +- .../Localization/Server/sv.json | 10 ++ .../Localization/Server/tr.json | 10 ++ .../Localization/Server/vi.json | 10 ++ .../Localization/Server/zh_TW.json | 10 ++ .../ApplicationHost.cs | 14 --- 69 files changed, 886 insertions(+), 295 deletions(-) create mode 100644 MediaBrowser.Common.Implementations/Security/SuppporterInfoResponse.cs diff --git a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs index 2e9b9d36fe..346af016ef 100644 --- a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs @@ -62,6 +62,14 @@ namespace MediaBrowser.Api.Playback.Hls { } + protected override bool SupportsThrottling + { + get + { + return false; + } + } + /// /// Gets the specified request. /// diff --git a/MediaBrowser.Api/System/SystemService.cs b/MediaBrowser.Api/System/SystemService.cs index cae648ae06..bac99c848a 100644 --- a/MediaBrowser.Api/System/SystemService.cs +++ b/MediaBrowser.Api/System/SystemService.cs @@ -1,8 +1,10 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; +using MediaBrowser.Common.Security; using MediaBrowser.Controller; using MediaBrowser.Controller.Net; +using MediaBrowser.Model.Entities; using MediaBrowser.Model.System; using ServiceStack; using System; @@ -42,6 +44,7 @@ namespace MediaBrowser.Api.System /// This is currently not authenticated because the uninstaller needs to be able to shutdown the server. /// [Route("/System/Shutdown", "POST", Summary = "Shuts down the application")] + [Authenticated(AllowLocal = true)] public class ShutdownApplication { } @@ -66,6 +69,12 @@ namespace MediaBrowser.Api.System public string Name { get; set; } } + [Route("/System/SupporterInfo", "GET")] + [Authenticated] + public class GetSupporterInfo : IReturn + { + } + /// /// Class SystemInfoService /// @@ -80,6 +89,8 @@ namespace MediaBrowser.Api.System private readonly INetworkManager _network; + private readonly ISecurityManager _security; + /// /// Initializes a new instance of the class. /// @@ -87,12 +98,20 @@ namespace MediaBrowser.Api.System /// The application paths. /// The file system. /// jsonSerializer - public SystemService(IServerApplicationHost appHost, IApplicationPaths appPaths, IFileSystem fileSystem, INetworkManager network) + public SystemService(IServerApplicationHost appHost, IApplicationPaths appPaths, IFileSystem fileSystem, INetworkManager network, ISecurityManager security) { _appHost = appHost; _appPaths = appPaths; _fileSystem = fileSystem; _network = network; + _security = security; + } + + public async Task Get(GetSupporterInfo request) + { + var result = await _security.GetSupporterInfo().ConfigureAwait(false); + + return ToOptimizedResult(result); } public object Get(GetServerLogs request) diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj index 2af671a6a6..4b0c956162 100644 --- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj +++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj @@ -101,6 +101,7 @@ + diff --git a/MediaBrowser.Common.Implementations/Security/MBLicenseFile.cs b/MediaBrowser.Common.Implementations/Security/MBLicenseFile.cs index 77a7bf0f68..8f3225f4e9 100644 --- a/MediaBrowser.Common.Implementations/Security/MBLicenseFile.cs +++ b/MediaBrowser.Common.Implementations/Security/MBLicenseFile.cs @@ -1,7 +1,10 @@ using MediaBrowser.Common.Configuration; using System; +using System.Collections.Concurrent; using System.Collections.Generic; +using System.Globalization; using System.IO; +using System.Linq; using System.Security.Cryptography; using System.Text; @@ -19,7 +22,7 @@ namespace MediaBrowser.Common.Implementations.Security if (value != _regKey) { //if key is changed - clear out our saved validations - UpdateRecords.Clear(); + _updateRecords.Clear(); _regKey = value; } } @@ -33,24 +36,30 @@ namespace MediaBrowser.Common.Implementations.Security } } - public string LegacyKey { get; set; } - private Dictionary UpdateRecords { get; set; } - private readonly object _lck = new object(); + private readonly ConcurrentDictionary _updateRecords = new ConcurrentDictionary(); + private readonly object _fileLock = new object(); private string _regKey; public MBLicenseFile(IApplicationPaths appPaths) { _appPaths = appPaths; - UpdateRecords = new Dictionary(); Load(); } + private void SetUpdateRecord(Guid key, DateTime value) + { + _updateRecords.AddOrUpdate(key, value, (k, v) => value); + } + public void AddRegCheck(string featureId) { using (var provider = new MD5CryptoServiceProvider()) { - UpdateRecords[new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId)))] = DateTime.UtcNow; + var key = new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId))); + var value = DateTime.UtcNow; + + SetUpdateRecord(key, value); Save(); } @@ -60,7 +69,11 @@ namespace MediaBrowser.Common.Implementations.Security { using (var provider = new MD5CryptoServiceProvider()) { - UpdateRecords.Remove(new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId)))); + var key = new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId))); + DateTime val; + + _updateRecords.TryRemove(key, out val); + Save(); } @@ -71,8 +84,10 @@ namespace MediaBrowser.Common.Implementations.Security using (var provider = new MD5CryptoServiceProvider()) { DateTime last; - lock(_lck) UpdateRecords.TryGetValue(new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId))), out last); - return last < DateTime.UtcNow ? last : DateTime.MinValue; // guard agains people just putting a large number in the file + _updateRecords.TryGetValue(new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(featureId))), out last); + + // guard agains people just putting a large number in the file + return last < DateTime.UtcNow ? last : DateTime.MinValue; } } @@ -80,7 +95,7 @@ namespace MediaBrowser.Common.Implementations.Security { string[] contents = null; var licenseFile = Filename; - lock (_lck) + lock (_fileLock) { try { @@ -95,13 +110,19 @@ namespace MediaBrowser.Common.Implementations.Security { //first line is reg key RegKey = contents[0]; + //next is legacy key - if (contents.Length > 1) LegacyKey = contents[1]; + if (contents.Length > 1) + { + // Don't need this anymore + } + //the rest of the lines should be pairs of features and timestamps for (var i = 2; i < contents.Length; i = i + 2) { var feat = Guid.Parse(contents[i]); - UpdateRecords[feat] = new DateTime(Convert.ToInt64(contents[i + 1])); + + SetUpdateRecord(feat, new DateTime(Convert.ToInt64(contents[i + 1]))); } } } @@ -109,16 +130,24 @@ namespace MediaBrowser.Common.Implementations.Security public void Save() { //build our array - var lines = new List {RegKey, LegacyKey}; - foreach (var pair in UpdateRecords) + var lines = new List + { + RegKey, + + // Legacy key + string.Empty + }; + + foreach (var pair in _updateRecords + .ToList()) { lines.Add(pair.Key.ToString()); - lines.Add(pair.Value.Ticks.ToString()); + lines.Add(pair.Value.Ticks.ToString(CultureInfo.InvariantCulture)); } var licenseFile = Filename; Directory.CreateDirectory(Path.GetDirectoryName(licenseFile)); - lock (_lck) File.WriteAllLines(licenseFile, lines); + lock (_fileLock) File.WriteAllLines(licenseFile, lines); } } } diff --git a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs index b464baffc6..22fce1ce1b 100644 --- a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs +++ b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs @@ -18,7 +18,7 @@ namespace MediaBrowser.Common.Implementations.Security public class PluginSecurityManager : ISecurityManager { private const string MBValidateUrl = Constants.Constants.MbAdminUrl + "service/registration/validate"; - + /// /// The _is MB supporter /// @@ -45,12 +45,12 @@ namespace MediaBrowser.Common.Implementations.Security } } - private MBLicenseFile _licenseFile; - private MBLicenseFile LicenseFile + private MBLicenseFile _licenseFile; + private MBLicenseFile LicenseFile { get { return _licenseFile ?? (_licenseFile = new MBLicenseFile(_appPaths)); } } - + private readonly IHttpClient _httpClient; private readonly IJsonSerializer _jsonSerializer; private readonly IApplicationHost _appHost; @@ -123,7 +123,7 @@ namespace MediaBrowser.Common.Implementations.Security return GetRegistrationStatusInternal(feature, mb2Equivalent, version); } - public Task GetSupporterRegistrationStatus() + private Task GetSupporterRegistrationStatus() { return GetRegistrationStatusInternal("MBSupporter", null, _appHost.ApplicationVersion.ToString()); } @@ -142,15 +142,49 @@ namespace MediaBrowser.Common.Implementations.Security { if (value != LicenseFile.RegKey) { - LicenseFile.RegKey = value; - LicenseFile.Save(); - + LicenseFile.RegKey = value; + LicenseFile.Save(); + // re-load registration info Task.Run(() => LoadAllRegistrationInfo()); } } } + public async Task GetSupporterInfo() + { + var key = SupporterKey; + + if (string.IsNullOrWhiteSpace(key)) + { + return new SupporterInfo(); + } + + var url = Constants.Constants.MbAdminUrl + "/service/supporter/retrieve?key=" + key; + + using (var stream = await _httpClient.Get(url, CancellationToken.None).ConfigureAwait(false)) + { + var response = _jsonSerializer.DeserializeFromStream(stream); + + + var info = new SupporterInfo + { + Email = response.email, + PlanType = response.planType, + SupporterKey = response.supporterKey, + ExpirationDate = string.IsNullOrWhiteSpace(response.expDate) ? (DateTime?)null : DateTime.Parse(response.expDate), + RegistrationDate = DateTime.Parse(response.regDate), + IsActiveSupporter = IsMBSupporter + }; + + info.IsExpiredSupporter = info.ExpirationDate.HasValue && info.ExpirationDate < DateTime.UtcNow && !string.IsNullOrWhiteSpace(info.SupporterKey); + + // TODO: Now that we've pulled this down, might as well update the cached suppoter registrationinfo? + + return info; + } + } + private async Task GetRegistrationStatusInternal(string feature, string mb2Equivalent = null, string version = null) @@ -158,7 +192,7 @@ namespace MediaBrowser.Common.Implementations.Security //check the reg file first to alleviate strain on the MB admin server - must actually check in every 30 days tho var reg = new RegRecord { - registered = LicenseFile.LastChecked(feature) > DateTime.UtcNow.AddDays(-15) + registered = LicenseFile.LastChecked(feature) > DateTime.UtcNow.AddDays(-7) }; var success = reg.registered; @@ -201,15 +235,33 @@ namespace MediaBrowser.Common.Implementations.Security } } - return new MBRegistrationRecord + var record = new MBRegistrationRecord { IsRegistered = reg.registered, ExpirationDate = reg.expDate, RegChecked = true, RegError = !success }; + + record.TrialVersion = IsInTrial(reg.expDate, record.RegChecked, record.IsRegistered); + record.IsValid = !record.RegChecked || (record.IsRegistered || record.TrialVersion); + + return record; } - + + private bool IsInTrial(DateTime expirationDate, bool regChecked, bool isRegistered) + { + //don't set this until we've successfully obtained exp date + if (!regChecked) + { + return false; + } + + var isInTrial = expirationDate > DateTime.UtcNow; + + return (isInTrial && !isRegistered); + } + /// /// Resets the supporter info. /// diff --git a/MediaBrowser.Common.Implementations/Security/SuppporterInfoResponse.cs b/MediaBrowser.Common.Implementations/Security/SuppporterInfoResponse.cs new file mode 100644 index 0000000000..49c5af8d82 --- /dev/null +++ b/MediaBrowser.Common.Implementations/Security/SuppporterInfoResponse.cs @@ -0,0 +1,14 @@ + +namespace MediaBrowser.Common.Implementations.Security +{ + internal class SuppporterInfoResponse + { + public string email { get; set; } + public string supporterKey { get; set; } + public int totalRegs { get; set; } + public int totalMachines { get; set; } + public string expDate { get; set; } + public string regDate { get; set; } + public string planType { get; set; } + } +} diff --git a/MediaBrowser.Common/Security/ISecurityManager.cs b/MediaBrowser.Common/Security/ISecurityManager.cs index a23a786f2f..9354543532 100644 --- a/MediaBrowser.Common/Security/ISecurityManager.cs +++ b/MediaBrowser.Common/Security/ISecurityManager.cs @@ -39,5 +39,11 @@ namespace MediaBrowser.Common.Security /// /// Task LoadAllRegistrationInfo(); + + /// + /// Gets the supporter information. + /// + /// Task<SupporterInfo>. + Task GetSupporterInfo(); } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Net/AuthenticatedAttribute.cs b/MediaBrowser.Controller/Net/AuthenticatedAttribute.cs index 567d20f39c..329dbaa463 100644 --- a/MediaBrowser.Controller/Net/AuthenticatedAttribute.cs +++ b/MediaBrowser.Controller/Net/AuthenticatedAttribute.cs @@ -7,6 +7,12 @@ namespace MediaBrowser.Controller.Net { public IAuthService AuthService { get; set; } + /// + /// Gets or sets a value indicating whether or not to allow local unauthenticated access. + /// + /// true if [allow local]; otherwise, false. + public bool AllowLocal { get; set; } + /// /// The request filter is executed before the service. /// @@ -15,7 +21,7 @@ namespace MediaBrowser.Controller.Net /// The request DTO public void RequestFilter(IRequest request, IResponse response, object requestDto) { - AuthService.Authenticate(request, response, requestDto); + AuthService.Authenticate(request, response, requestDto, AllowLocal); } /// diff --git a/MediaBrowser.Controller/Net/IAuthService.cs b/MediaBrowser.Controller/Net/IAuthService.cs index 41859395b6..dca70f58fe 100644 --- a/MediaBrowser.Controller/Net/IAuthService.cs +++ b/MediaBrowser.Controller/Net/IAuthService.cs @@ -4,6 +4,6 @@ namespace MediaBrowser.Controller.Net { public interface IAuthService { - void Authenticate(IRequest request, IResponse response, object requestDto); + void Authenticate(IRequest request, IResponse response, object requestDto, bool allowLocal); } } diff --git a/MediaBrowser.Model/Entities/MBRegistrationRecord.cs b/MediaBrowser.Model/Entities/MBRegistrationRecord.cs index e72a5011c2..3a4af19d87 100644 --- a/MediaBrowser.Model/Entities/MBRegistrationRecord.cs +++ b/MediaBrowser.Model/Entities/MBRegistrationRecord.cs @@ -5,25 +5,21 @@ namespace MediaBrowser.Model.Entities public class MBRegistrationRecord { public DateTime ExpirationDate { get; set; } - public bool IsRegistered { get; set;} + public bool IsRegistered { get; set; } public bool RegChecked { get; set; } public bool RegError { get; set; } - private bool? _isInTrial; - public bool TrialVersion - { - get - { - if (_isInTrial == null) - { - if (!RegChecked) return false; //don't set this until we've successfully obtained exp date - _isInTrial = ExpirationDate > DateTime.Now; - } - return (_isInTrial.Value && !IsRegistered); - } - } - public bool IsValid - { - get { return !RegChecked || (IsRegistered || TrialVersion); } - } + public bool TrialVersion { get; set; } + public bool IsValid { get; set; } + } + + public class SupporterInfo + { + public string Email { get; set; } + public string SupporterKey { get; set; } + public DateTime? ExpirationDate { get; set; } + public DateTime RegistrationDate { get; set; } + public string PlanType { get; set; } + public bool IsActiveSupporter { get; set; } + public bool IsExpiredSupporter { get; set; } } } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/EntryPoints/LoadRegistrations.cs b/MediaBrowser.Server.Implementations/EntryPoints/LoadRegistrations.cs index c2c4056f53..27170ced99 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/LoadRegistrations.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/LoadRegistrations.cs @@ -2,6 +2,8 @@ using MediaBrowser.Controller.Plugins; using MediaBrowser.Model.Logging; using System; +using System.Threading; +using System.Threading.Tasks; namespace MediaBrowser.Server.Implementations.EntryPoints { @@ -20,6 +22,8 @@ namespace MediaBrowser.Server.Implementations.EntryPoints /// private readonly ILogger _logger; + private Timer _timer; + /// /// Initializes a new instance of the class. /// @@ -35,7 +39,12 @@ namespace MediaBrowser.Server.Implementations.EntryPoints /// /// Runs this instance. /// - public async void Run() + public void Run() + { + _timer = new Timer(s => LoadAllRegistrations(), null, TimeSpan.FromMilliseconds(100), TimeSpan.FromHours(24)); + } + + private async Task LoadAllRegistrations() { try { @@ -52,6 +61,11 @@ namespace MediaBrowser.Server.Implementations.EntryPoints /// public void Dispose() { + if (_timer != null) + { + _timer.Dispose(); + _timer = null; + } } } } diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs index 1cec4461b9..16ca8b0991 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs @@ -14,6 +14,7 @@ using ServiceStack.Host.HttpListener; using ServiceStack.Logging; using ServiceStack.Web; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; @@ -39,13 +40,15 @@ namespace MediaBrowser.Server.Implementations.HttpServer public event EventHandler WebSocketConnected; + private readonly ConcurrentDictionary _localEndPoints = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + /// /// Gets the local end points. /// /// The local end points. public IEnumerable LocalEndPoints { - get { return _listener == null ? new List() : _listener.LocalEndPoints; } + get { return _listener == null ? new List() : _localEndPoints.Keys.ToList(); } } public HttpListenerHost(IApplicationHost applicationHost, ILogManager logManager, string serviceName, string handlerPath, string defaultRedirectPath, params Assembly[] assembliesWithServices) @@ -151,6 +154,11 @@ namespace MediaBrowser.Server.Implementations.HttpServer return this; } + private void OnRequestReceived(string localEndPoint) + { + _localEndPoints.GetOrAdd(localEndPoint, localEndPoint); + } + /// /// Starts the Web Service /// @@ -159,9 +167,9 @@ namespace MediaBrowser.Server.Implementations.HttpServer HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(UrlPrefixes.First()); _listener = NativeWebSocket.IsSupported - ? _listener = new HttpListenerServer(_logger) + ? _listener = new HttpListenerServer(_logger, OnRequestReceived) //? _listener = new WebSocketSharpListener(_logger) - : _listener = new WebSocketSharpListener(_logger); + : _listener = new WebSocketSharpListener(_logger, OnRequestReceived); _listener.WebSocketHandler = WebSocketHandler; _listener.ErrorHandler = ErrorHandler; diff --git a/MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs b/MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs index 1d80a263c0..86e8856cfb 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs @@ -8,8 +8,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer { public interface IHttpListener : IDisposable { - IEnumerable LocalEndPoints { get; } - /// /// Gets or sets the error handler. /// diff --git a/MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs b/MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs index bdc2750fb0..118bec60ed 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs @@ -4,7 +4,6 @@ using ServiceStack; using ServiceStack.Host.HttpListener; using ServiceStack.Web; using System; -using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Net; @@ -20,26 +19,18 @@ namespace MediaBrowser.Server.Implementations.HttpServer.NetListener private HttpListener _listener; private readonly AutoResetEvent _listenForNextRequest = new AutoResetEvent(false); - public System.Action ErrorHandler { get; set; } + public Action ErrorHandler { get; set; } public Action WebSocketHandler { get; set; } - public System.Func RequestHandler { get; set; } + public Func RequestHandler { get; set; } - private readonly ConcurrentDictionary _localEndPoints = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + private readonly Action _endpointListener; - public HttpListenerServer(ILogger logger) + public HttpListenerServer(ILogger logger, Action endpointListener) { _logger = logger; + _endpointListener = endpointListener; } - /// - /// Gets the local end points. - /// - /// The local end points. - public IEnumerable LocalEndPoints - { - get { return _localEndPoints.Keys.ToList(); } - } - private List UrlPrefixes { get; set; } public void Start(IEnumerable urlPrefixes) @@ -47,7 +38,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.NetListener UrlPrefixes = urlPrefixes.ToList(); if (_listener == null) - _listener = new System.Net.HttpListener(); + _listener = new HttpListener(); //HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(UrlPrefixes.First()); @@ -229,7 +220,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.NetListener { var address = endpoint.ToString(); - _localEndPoints.GetOrAdd(address, address); + _endpointListener(address); } LogRequest(_logger, request); diff --git a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs index 19870c4355..2b9ae7d098 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs @@ -42,7 +42,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security /// public string HtmlRedirect { get; set; } - public void Authenticate(IRequest req, IResponse res, object requestDto) + public void Authenticate(IRequest req, IResponse res, object requestDto, bool allowLocal) { if (HostContext.HasValidAuthSecret(req)) return; @@ -50,13 +50,13 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security //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, allowLocal); } // TODO: Remove this when all clients have supported the new sescurity - private readonly List _updatedClients = new List(){"Dashboard"}; + private readonly List _updatedClients = new List() { "Dashboard", "Chromecast" }; - private void ValidateUser(IRequest req) + private void ValidateUser(IRequest req, bool allowLocal) { //This code is executed before the service var auth = AuthorizationContext.GetAuthorizationInfo(req); @@ -65,7 +65,10 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security || _config.Configuration.EnableTokenAuthentication || _updatedClients.Contains(auth.Client ?? string.Empty, StringComparer.OrdinalIgnoreCase)) { - SessionManager.ValidateSecurityToken(auth.Token); + if (!allowLocal || !req.IsLocal) + { + SessionManager.ValidateSecurityToken(auth.Token); + } } var user = string.IsNullOrWhiteSpace(auth.UserId) @@ -96,35 +99,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security } } - private void ExecuteBasic(IRequest req, IResponse res, object requestDto) - { - if (AuthenticateService.AuthProviders == null) - throw new InvalidOperationException( - "The AuthService must be initialized by calling AuthService.Init to use an authenticate attribute"); - - var matchingOAuthConfigs = AuthenticateService.AuthProviders.Where(x => - this.Provider.IsNullOrEmpty() - || x.Provider == this.Provider).ToList(); - - if (matchingOAuthConfigs.Count == 0) - { - res.WriteError(req, requestDto, "No OAuth Configs found matching {0} provider" - .Fmt(this.Provider ?? "any")); - res.EndRequest(); - } - - matchingOAuthConfigs.OfType() - .Each(x => x.PreAuthenticate(req, res)); - - var session = req.GetSession(); - if (session == null || !matchingOAuthConfigs.Any(x => session.IsAuthorized(x.Provider))) - { - if (this.DoHtmlRedirectIfConfigured(req, res, true)) return; - - AuthProvider.HandleFailedAuth(matchingOAuthConfigs[0], session, req, res); - } - } - protected bool DoHtmlRedirectIfConfigured(IRequest req, IResponse res, bool includeRedirectParam = false) { var htmlRedirect = this.HtmlRedirect ?? AuthenticateService.HtmlRedirect; diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs index 477aa3878e..f2fae9e90d 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs @@ -3,7 +3,6 @@ using MediaBrowser.Model.Logging; using ServiceStack; using ServiceStack.Web; using System; -using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; @@ -15,20 +14,16 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp { public class WebSocketSharpListener : IHttpListener { - private readonly ConcurrentDictionary _localEndPoints = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); private WebSocketSharp.Net.HttpListener _listener; private readonly AutoResetEvent _listenForNextRequest = new AutoResetEvent(false); private readonly ILogger _logger; + private readonly Action _endpointListener; - public WebSocketSharpListener(ILogger logger) + public WebSocketSharpListener(ILogger logger, Action endpointListener) { _logger = logger; - } - - public IEnumerable LocalEndPoints - { - get { return _localEndPoints.Keys.ToList(); } + _endpointListener = endpointListener; } public Action ErrorHandler { get; set; } @@ -170,7 +165,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp { var address = endpoint.ToString(); - _localEndPoints.GetOrAdd(address, address); + _endpointListener(address); } LogRequest(_logger, request); diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json index 91796d5dc8..84f1d5aaa4 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json @@ -429,5 +429,14 @@ "TabMusicVideos": "\u0645\u0648\u0633\u064a\u0642\u0649 \u0627\u0644\u0641\u064a\u062f\u064a\u0648", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json index 1440a079cf..8bec53c5fd 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Music Videos", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json index e9e733300a..f2219933fc 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Hudebn\u00ed videa", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json index 4703d6b9f6..7d7492e64a 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Musik Videoer", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json index e671c7da07..dfa4fd59ee 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Musikvideos", "BirthPlaceValue": "Geburtsort: {0}", "DeathDateValue": "Gestorben: {0}", - "BirthDateValue": "Geboren: {0}" + "BirthDateValue": "Geboren: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json index f961db0558..3d57ae21f5 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json @@ -429,5 +429,14 @@ "TabMusicVideos": "\u039c\u03bf\u03c5\u03c3\u03b9\u03ba\u03ac \u03b2\u03af\u03bd\u03c4\u03b5\u03bf", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json index e8525157d3..9db725ec73 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Music Videos", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json index dd6e416e1a..b740506ae5 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Music Videos", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json index c05f429141..3d736ba36f 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Videos Musicales", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json index 9db75b4bc8..27930a13aa 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Videos Musicales", "BirthPlaceValue": "Lugar de nacimiento: {0}", "DeathDateValue": "Fallcimiento: {0}", - "BirthDateValue": "Nacimiento: {0}" + "BirthDateValue": "Nacimiento: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json index 7b1feb6b3b..ca08980ab4 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Videos musicales", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json index e81dc57752..aaff70b693 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json @@ -429,5 +429,14 @@ "TabMusicVideos": "\u05e7\u05dc\u05d9\u05e4\u05d9\u05dd", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json index 50cc701cff..5ded6e80ba 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Video Musicali", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json index c8ce64b833..bdc184a374 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json @@ -383,58 +383,67 @@ "LabelImageFetchersHelp": "Enable and rank your preferred image fetchers in order of priority.", "ButtonQueueAllFromHere": "Queue all from here", "ButtonPlayAllFromHere": "Play all from here", - "LabelDynamicExternalId": "{0} Id:", - "HeaderIdentify": "Identify Item", - "PersonTypePerson": "Person", - "LabelTitleDisplayOrder": "Title display order:", - "OptionSortName": "Sort name", - "OptionReleaseDate": "Release date", - "LabelSeasonNumber": "Season number:", - "LabelDiscNumber": "Disc number", - "LabelParentNumber": "Parent number", - "LabelEpisodeNumber": "Episode number:", - "LabelTrackNumber": "Track number:", - "LabelNumber": "Number:", - "LabelReleaseDate": "Release date:", - "LabelEndDate": "End date:", - "LabelYear": "Year:", - "LabelDateOfBirth": "Date of birth:", - "LabelBirthYear": "Birth year:", - "LabelDeathDate": "Death date:", - "HeaderRemoveMediaLocation": "Remove Media Location", - "MessageConfirmRemoveMediaLocation": "Are you sure you wish to remove this location?", - "HeaderRenameMediaFolder": "Rename Media Folder", - "LabelNewName": "New name:", - "HeaderAddMediaFolder": "Add Media Folder", - "HeaderAddMediaFolderHelp": "Name (Movies, Music, TV, etc):", - "HeaderRemoveMediaFolder": "Remove Media Folder", - "MessageTheFollowingLocationWillBeRemovedFromLibrary": "The following media locations will be removed from your library:", - "MessageAreYouSureYouWishToRemoveMediaFolder": "Are you sure you wish to remove this media folder?", - "ButtonRename": "Rename", - "ButtonChangeType": "Change type", - "ButtonRemove": "Remove", - "HeaderMediaLocations": "Media Locations", - "LabelFolderTypeValue": "Folder type: {0}", - "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed movies & tv", - "FolderTypeMovies": "Movies", - "FolderTypeMusic": "Music", - "FolderTypeAdultVideos": "Adult videos", - "FolderTypePhotos": "Photos", - "FolderTypeMusicVideos": "Music videos", - "FolderTypeHomeVideos": "Home videos", - "FolderTypeGames": "Games", - "FolderTypeBooks": "Books", - "FolderTypeTvShows": "TV shows", - "TabMovies": "Movies", - "TabSeries": "Series", - "TabEpisodes": "Episodes", - "TabTrailers": "Trailers", - "TabGames": "Games", - "TabAlbums": "Albums", - "TabSongs": "Songs", - "TabMusicVideos": "Music Videos", - "BirthPlaceValue": "Birth place: {0}", - "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "LabelDynamicExternalId": "{0} Id:", + "HeaderIdentify": "Identify Item", + "PersonTypePerson": "Person", + "LabelTitleDisplayOrder": "Title display order:", + "OptionSortName": "Sort name", + "OptionReleaseDate": "Release date", + "LabelSeasonNumber": "Season number:", + "LabelDiscNumber": "Disc number", + "LabelParentNumber": "Parent number", + "LabelEpisodeNumber": "Episode number:", + "LabelTrackNumber": "Track number:", + "LabelNumber": "Number:", + "LabelReleaseDate": "Release date:", + "LabelEndDate": "End date:", + "LabelYear": "Year:", + "LabelDateOfBirth": "Date of birth:", + "LabelBirthYear": "Birth year:", + "LabelDeathDate": "Death date:", + "HeaderRemoveMediaLocation": "Remove Media Location", + "MessageConfirmRemoveMediaLocation": "Are you sure you wish to remove this location?", + "HeaderRenameMediaFolder": "Rename Media Folder", + "LabelNewName": "New name:", + "HeaderAddMediaFolder": "Add Media Folder", + "HeaderAddMediaFolderHelp": "Name (Movies, Music, TV, etc):", + "HeaderRemoveMediaFolder": "Remove Media Folder", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "The following media locations will be removed from your library:", + "MessageAreYouSureYouWishToRemoveMediaFolder": "Are you sure you wish to remove this media folder?", + "ButtonRename": "Rename", + "ButtonChangeType": "Change type", + "ButtonRemove": "Remove", + "HeaderMediaLocations": "Media Locations", + "LabelFolderTypeValue": "Folder type: {0}", + "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", + "FolderTypeMixed": "Mixed movies & tv", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV shows", + "TabMovies": "Movies", + "TabSeries": "Series", + "TabEpisodes": "Episodes", + "TabTrailers": "Trailers", + "TabGames": "Games", + "TabAlbums": "Albums", + "TabSongs": "Songs", + "TabMusicVideos": "Music Videos", + "BirthPlaceValue": "Birth place: {0}", + "DeathDateValue": "Died: {0}", + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json index 0e07e2f02b..8572c0b6ba 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json @@ -132,14 +132,14 @@ "HeaderRatingsDownloads": "\u0411\u0430\u0493\u0430\u043b\u0430\u0443 \/ \u0416\u04af\u043a\u0442\u0435\u0443\u043b\u0435\u0440", "HeaderConfirmProfileDeletion": "\u041f\u0440\u043e\u0444\u0430\u0439\u043b \u0436\u043e\u044e\u0434\u044b \u0440\u0430\u0441\u0442\u0430\u0443", "MessageConfirmProfileDeletion": "\u0428\u044b\u043d\u044b\u043c\u0435\u043d \u043e\u0441\u044b \u043f\u0440\u043e\u0444\u0430\u0439\u043b\u0434\u044b \u0436\u043e\u044e \u049b\u0430\u0436\u0435\u0442 \u043f\u0435?", - "HeaderSelectServerCachePath": "Server Cache \u049b\u0430\u043b\u0442\u0430\u0441\u044b \u0436\u043e\u043b\u044b\u043d \u0442\u0430\u04a3\u0434\u0430\u0443", - "HeaderSelectTranscodingPath": "Transcoding Temporary \u049b\u0430\u043b\u0442\u0430\u0441\u044b \u0436\u043e\u043b\u044b\u043d \u0442\u0430\u04a3\u0434\u0430\u0443", - "HeaderSelectImagesByNamePath": "Images By Name \u049b\u0430\u043b\u0442\u0430\u0441\u044b \u0436\u043e\u043b\u044b\u043d \u0442\u0430\u04a3\u0434\u0430\u0443", - "HeaderSelectMetadataPath": "Metadata \u049b\u0430\u043b\u0442\u0430\u0441\u044b \u0436\u043e\u043b\u044b\u043d \u0442\u0430\u04a3\u0434\u0430\u0443", - "HeaderSelectServerCachePathHelp": "Server cache \u0444\u0430\u0439\u043b\u0434\u0430\u0440\u044b\u043d \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443 \u04af\u0448\u0456\u043d \u0436\u043e\u043b\u0434\u044b \u0448\u043e\u043b\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0435\u043d\u0433\u0456\u0437\u0456\u04a3\u0456\u0437. \u041e\u0441\u044b \u049b\u0430\u043b\u0442\u0430 \u0436\u0430\u0437\u0443 \u04af\u0448\u0456\u043d \u049b\u043e\u043b \u0436\u0435\u0442\u0456\u043c\u0434\u0456 \u0431\u043e\u043b\u0443\u044b \u049b\u0430\u0436\u0435\u0442.", - "HeaderSelectTranscodingPathHelp": "Transcoding temporary \u0444\u0430\u0439\u043b\u0434\u0430\u0440\u044b\u043d \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443 \u04af\u0448\u0456\u043d \u0436\u043e\u043b\u0434\u044b \u0448\u043e\u043b\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0435\u043d\u0433\u0456\u0437\u0456\u04a3\u0456\u0437. \u041e\u0441\u044b \u049b\u0430\u043b\u0442\u0430 \u0436\u0430\u0437\u0443 \u04af\u0448\u0456\u043d \u049b\u043e\u043b \u0436\u0435\u0442\u0456\u043c\u0434\u0456 \u0431\u043e\u043b\u0443\u044b \u049b\u0430\u0436\u0435\u0442.", - "HeaderSelectImagesByNamePathHelp": "Items by name \u049b\u0430\u043b\u0442\u0430\u0441\u044b \u04af\u0448\u0456\u043d \u0436\u043e\u043b\u0434\u044b \u0448\u043e\u043b\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0435\u043d\u0433\u0456\u0437\u0456\u04a3\u0456\u0437. \u041e\u0441\u044b \u049b\u0430\u043b\u0442\u0430 \u0436\u0430\u0437\u0443 \u04af\u0448\u0456\u043d \u049b\u043e\u043b \u0436\u0435\u0442\u0456\u043c\u0434\u0456 \u0431\u043e\u043b\u0443\u044b \u049b\u0430\u0436\u0435\u0442.", - "HeaderSelectMetadataPathHelp": "Metadata \u0444\u0430\u0439\u043b\u0434\u0430\u0440\u044b\u043d \u0441\u0430\u049b\u0442\u0430\u0443 \u04af\u0448\u0456\u043d \u0436\u043e\u043b\u0434\u044b \u0448\u043e\u043b\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0435\u043d\u0433\u0456\u0437\u0456\u04a3\u0456\u0437. \u041e\u0441\u044b \u049b\u0430\u043b\u0442\u0430 \u0436\u0430\u0437\u0443 \u04af\u0448\u0456\u043d \u049b\u043e\u043b \u0436\u0435\u0442\u0456\u043c\u0434\u0456 \u0431\u043e\u043b\u0443\u044b \u049b\u0430\u0436\u0435\u0442.", + "HeaderSelectServerCachePath": "\u0421\u0435\u0440\u0432\u0435\u0440 \u043a\u0435\u0448\u0456\u043d\u0456\u04a3 \u0436\u043e\u043b\u044b\u043d \u0442\u0430\u04a3\u0434\u0430\u0443", + "HeaderSelectTranscodingPath": "\u049a\u0430\u0439\u0442\u0430 \u043a\u043e\u0434\u0442\u0430\u0443\u0434\u044b\u04a3 \u0443\u0430\u049b\u044b\u0442\u0448\u0430 \u0444\u0430\u0439\u043b\u0434\u0430\u0440\u044b\u0435\u044b\u04a3 \u0436\u043e\u043b\u044b\u043d \u0442\u0430\u04a3\u0434\u0430\u0443", + "HeaderSelectImagesByNamePath": "\u0410\u0442\u044b \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440 \u0436\u043e\u043b\u044b\u043d \u0442\u0430\u04a3\u0434\u0430\u0443", + "HeaderSelectMetadataPath": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u0436\u043e\u043b\u044b\u043d \u0442\u0430\u04a3\u0434\u0430\u0443", + "HeaderSelectServerCachePathHelp": "\u0421\u0435\u0440\u0432\u0435\u0440\u0434\u0456\u04a3 \u043a\u0435\u0448 \u0444\u0430\u0439\u043b\u0434\u0430\u0440\u044b\u043d \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443 \u04af\u0448\u0456\u043d \u0436\u043e\u043b\u0434\u044b \u0448\u043e\u043b\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0435\u043d\u0433\u0456\u0437\u0456\u04a3\u0456\u0437. \u041e\u0441\u044b \u049b\u0430\u043b\u0442\u0430 \u0436\u0430\u0437\u0443 \u04af\u0448\u0456\u043d \u049b\u043e\u043b \u0436\u0435\u0442\u0456\u043c\u0434\u0456 \u0431\u043e\u043b\u0443\u044b \u049b\u0430\u0436\u0435\u0442.", + "HeaderSelectTranscodingPathHelp": "\u049a\u0430\u0439\u0442\u0430 \u043a\u043e\u0434\u0442\u0430\u0443\u0434\u044b\u04a3 \u0443\u0430\u049b\u044b\u0442\u0448\u0430 \u0444\u0430\u0439\u043b\u0434\u0430\u0440\u044b\u043d \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443 \u04af\u0448\u0456\u043d \u0436\u043e\u043b\u0434\u044b \u0448\u043e\u043b\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0435\u043d\u0433\u0456\u0437\u0456\u04a3\u0456\u0437. \u041e\u0441\u044b \u049b\u0430\u043b\u0442\u0430 \u0436\u0430\u0437\u0443 \u04af\u0448\u0456\u043d \u049b\u043e\u043b \u0436\u0435\u0442\u0456\u043c\u0434\u0456 \u0431\u043e\u043b\u0443\u044b \u049b\u0430\u0436\u0435\u0442.", + "HeaderSelectImagesByNamePathHelp": "\u0410\u0442\u044b \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440 \u04af\u0448\u0456\u043d \u0436\u043e\u043b\u0434\u044b \u0448\u043e\u043b\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0435\u043d\u0433\u0456\u0437\u0456\u04a3\u0456\u0437. \u041e\u0441\u044b \u049b\u0430\u043b\u0442\u0430 \u0436\u0430\u0437\u0443 \u04af\u0448\u0456\u043d \u049b\u043e\u043b \u0436\u0435\u0442\u0456\u043c\u0434\u0456 \u0431\u043e\u043b\u0443\u044b \u049b\u0430\u0436\u0435\u0442.", + "HeaderSelectMetadataPathHelp": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u0441\u0430\u049b\u0442\u0430\u0443 \u04af\u0448\u0456\u043d \u0436\u043e\u043b\u0434\u044b \u0448\u043e\u043b\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0435\u043d\u0433\u0456\u0437\u0456\u04a3\u0456\u0437. \u041e\u0441\u044b \u049b\u0430\u043b\u0442\u0430 \u0436\u0430\u0437\u0443 \u04af\u0448\u0456\u043d \u049b\u043e\u043b \u0436\u0435\u0442\u0456\u043c\u0434\u0456 \u0431\u043e\u043b\u0443\u044b \u049b\u0430\u0436\u0435\u0442.", "HeaderSelectChannelDownloadPath": "\u0410\u0440\u043d\u0430 \u0436\u04af\u043a\u0442\u0435\u0443 \u0436\u043e\u043b\u044b\u043d \u0442\u0430\u04a3\u0434\u0430\u04a3\u044b\u0437", "HeaderSelectChannelDownloadPathHelp": "\u0410\u0440\u043d\u0430 \u043a\u0435\u0448\u0456 \u0444\u0430\u0439\u043b\u0434\u0430\u0440\u044b\u043d \u0441\u0430\u049b\u0442\u0430\u043f \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443 \u04af\u0448\u0456\u043d \u0436\u043e\u043b\u0434\u044b \u0448\u043e\u043b\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0435\u043d\u0433\u0456\u0437\u0456\u04a3\u0456\u0437. \u041e\u0441\u044b \u049b\u0430\u043b\u0442\u0430 \u0436\u0430\u0437\u0443 \u04af\u0448\u0456\u043d \u049b\u043e\u043b \u0436\u0435\u0442\u0456\u043c\u0434\u0456 \u0431\u043e\u043b\u0443\u044b \u049b\u0430\u0436\u0435\u0442.", "OptionNewCollection": "\u0416\u0430\u04a3\u0430...", @@ -275,7 +275,7 @@ "OptionGenres": "\u0416\u0430\u043d\u0440\u043b\u0430\u0440", "OptionParentalRating": "\u0416\u0430\u0441\u0442\u0430\u0441 \u0441\u0430\u043d\u0430\u0442", "OptionPeople": "\u0410\u0434\u0430\u043c\u0434\u0430\u0440", - "OptionRuntime": "\u041e\u0440\u044b\u043d\u0434\u0430\u0443 \u0443\u0430\u049b\u044b\u0442\u044b", + "OptionRuntime": "\u04b0\u0437\u0430\u049b\u0442\u044b\u0493\u044b", "OptionProductionLocations": "\u04e8\u043d\u0434\u0456\u0440\u0443 \u043e\u0440\u044b\u043d\u0434\u0430\u0440\u044b", "OptionBirthLocation": "\u0422\u0443\u0493\u0430\u043d \u043e\u0440\u043d\u044b", "LabelAllChannels": "\u0411\u0430\u0440\u043b\u044b\u049b \u0430\u0440\u043d\u0430\u043b\u0430\u0440", @@ -429,5 +429,14 @@ "TabMusicVideos": "\u0411\u0435\u0439\u043d\u0435\u043a\u043b\u0438\u043f\u0442\u0435\u0440", "BirthPlaceValue": "\u0422\u0443\u0493\u0430\u043d \u043e\u0440\u043d\u044b: {0}", "DeathDateValue": "\u04e8\u043b\u0433\u0435\u043d\u0456: {0}", - "BirthDateValue": "\u0422\u0443\u0493\u0430\u043d\u044b: {0}" + "BirthDateValue": "\u0422\u0443\u0493\u0430\u043d\u044b: {0}", + "HeaderLatestReviews": "\u0415\u04a3 \u043a\u0435\u0439\u0456\u043d\u0433\u0456 \u043f\u0456\u043a\u0456\u0440\u043b\u0435\u0440", + "HeaderPluginInstallation": "\u041f\u043b\u0430\u0433\u0438\u043d \u043e\u0440\u043d\u0430\u0442\u044b\u043c\u044b", + "MessageAlreadyInstalled": "\u041e\u0441\u044b \u043d\u04b1\u0441\u049b\u0430 \u0431\u04b1\u0440\u044b\u043d\u043d\u0430\u043d \u043e\u0440\u043d\u0430\u0442\u044b\u043b\u0493\u0430\u043d.", + "ValueReviewCount": "{0} \u043f\u0456\u043a\u0456\u0440", + "MessageYouHaveVersionInstalled": "\u049a\u0430\u0437\u0456\u0440 {0} \u043e\u0440\u043d\u0430\u0442\u044b\u043b\u0493\u0430\u043d", + "MessageTrialExpired": "\u041e\u0441\u044b \u043c\u04af\u043c\u043a\u0456\u043d\u0434\u0456\u043a \u04af\u0448\u0456\u043d \u0442\u0430\u043d\u044b\u0441\u0442\u044b\u0440\u0443 \u043a\u0435\u0437\u0435\u04a3\u0456\u043d\u0456\u04a3 \u043c\u0435\u0440\u0437\u0456\u043c\u0456 \u04e9\u0442\u0442\u0456", + "MessageTrialWillExpireIn": "\u041e\u0441\u044b \u043c\u04af\u043c\u043a\u0456\u043d\u0434\u0456\u043a \u04af\u0448\u0456\u043d \u0442\u0430\u043d\u044b\u0441\u0442\u044b\u0440\u0443 \u043a\u0435\u0437\u0435\u04a3\u0456\u043d\u0456\u04a3 \u043c\u0435\u0440\u0437\u0456\u043c\u0456 {0} \u043a\u04af\u043d\u0434\u0435 \u04e9\u0442\u0435\u0434\u0456", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "\u0411\u0430\u0493\u0430\u0441\u044b: {0} USD" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json index b6d5e50e55..6aff55b44e 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Music Videos", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json index 024009e03a..13a031937b 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Musikk-videoer", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json index 6b722885a3..912aabe85c 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Music Videos", "BirthPlaceValue": "Geboorte plaats: {0})", "DeathDateValue": "Overleden: {0}", - "BirthDateValue": "Geboren: {0}" + "BirthDateValue": "Geboren: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json index b9238b5544..be23009ba5 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Teledyski", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json index db60125130..e4b0dee4cf 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json @@ -58,14 +58,14 @@ "ButtonMute": "Mudo", "ButtonUnmute": "Remover Mudo", "ButtonStop": "Parar", - "ButtonNextTrack": "Faixa seguinte", + "ButtonNextTrack": "Pr\u00f3xima Faixa", "ButtonPause": "Pausar", "ButtonPlay": "Reproduzir", "ButtonEdit": "Editar", "ButtonQueue": "Adicionar \u00e0 fila", "ButtonPlayTrailer": "Reproduzir trailer", "ButtonPlaylist": "Lista de reprodu\u00e7\u00e3o", - "ButtonPreviousTrack": "Faixa anterior", + "ButtonPreviousTrack": "Faixa Anterior", "LabelEnabled": "Ativada", "LabelDisabled": "Desativada", "ButtonMoreInformation": "Mais informa\u00e7\u00f5es", @@ -429,5 +429,14 @@ "TabMusicVideos": "V\u00eddeos Musicais", "BirthPlaceValue": "Local de nascimento: {0}", "DeathDateValue": "Morte: {0}", - "BirthDateValue": "Nascimento: {0}" + "BirthDateValue": "Nascimento: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json index 6f3146bfd8..00ed7f6220 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Videos Musicais", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json index b008720758..76e572669b 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json @@ -137,7 +137,7 @@ "HeaderSelectImagesByNamePath": "\u0412\u044b\u0431\u043e\u0440 \u043f\u0443\u0442\u0438 \u0434\u043b\u044f \u043f\u0430\u043f\u043a\u0438 Images By Name", "HeaderSelectMetadataPath": "\u0412\u044b\u0431\u043e\u0440 \u043f\u0443\u0442\u0438 \u0434\u043b\u044f \u043f\u0430\u043f\u043a\u0438 Metadata", "HeaderSelectServerCachePathHelp": "\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0438\u043b\u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0443\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432 server cache. \u041f\u0430\u043f\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438.", - "HeaderSelectTranscodingPathHelp": "\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0438\u043b\u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0443\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432 transcoding temporary. \u041f\u0430\u043f\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438.", + "HeaderSelectTranscodingPathHelp": "\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0438\u043b\u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0443\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438. \u041f\u0430\u043f\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438.", "HeaderSelectImagesByNamePathHelp": "\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0438\u043b\u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 items by name. \u041f\u0430\u043f\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438.", "HeaderSelectMetadataPathHelp": "\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0438\u043b\u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 metadata. \u041f\u0430\u043f\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438.", "HeaderSelectChannelDownloadPath": "\u0412\u044b\u0431\u043e\u0440 \u043f\u0443\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u0430\u043d\u0430\u043b\u043e\u0432", @@ -288,7 +288,7 @@ "HeaderAlert": "\u041e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435", "MessagePleaseRestart": "\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435.", "ButtonRestart": "\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c", - "MessagePleaseRefreshPage": "\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.", + "MessagePleaseRefreshPage": "\u0410\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0439\u0442\u0435 \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.", "ButtonHide": "\u0421\u043a\u0440\u044b\u0442\u044c", "MessageSettingsSaved": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b.", "ButtonSignOut": "\u0412\u044b\u0439\u0442\u0438", @@ -429,5 +429,14 @@ "TabMusicVideos": "\u041a\u043b\u0438\u043f\u044b", "BirthPlaceValue": "\u041c\u0435\u0441\u0442\u043e \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f: {0}", "DeathDateValue": "\u041a\u043e\u043d\u0447\u0438\u043d\u0430: {0}", - "BirthDateValue": "\u0420\u043e\u0436\u0434\u0435\u043d\u0438\u0435: {0}" + "BirthDateValue": "\u0420\u043e\u0436\u0434\u0435\u043d\u0438\u0435: {0}", + "HeaderLatestReviews": "\u041d\u043e\u0432\u0438\u043d\u043a\u0438 \u043e\u0442\u0437\u044b\u0432\u043e\u0432", + "HeaderPluginInstallation": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430", + "MessageAlreadyInstalled": "\u0414\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430.", + "ValueReviewCount": "\u041e\u0442\u0437\u044b\u0432\u043e\u0432: {0}", + "MessageYouHaveVersionInstalled": "\u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f {0}.", + "MessageTrialExpired": "\u041f\u0440\u043e\u0431\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0441\u0442\u0451\u043a", + "MessageTrialWillExpireIn": "\u041f\u0440\u043e\u0431\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0441\u0442\u0435\u0447\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 {0} \u0434\u043d\u0435\u0439", + "MessageInstallPluginFromApp": "\u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.", + "ValuePriceUSD": "\u0426\u0435\u043d\u0430: {0} USD" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json index 50d24dae56..f6c2313e55 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Musikvideor", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json index 9232c2fdd9..c6c2b44911 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Klipler", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json index b62b243675..b63fb262f4 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json @@ -429,5 +429,14 @@ "TabMusicVideos": "C\u00e1c video \u00e2m nh\u1ea1c", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json index dc4e7eb843..1b7217efb2 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json @@ -429,5 +429,14 @@ "TabMusicVideos": "Music Videos", "BirthPlaceValue": "Birth place: {0}", "DeathDateValue": "Died: {0}", - "BirthDateValue": "Born: {0}" + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {0} (USD)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ar.json b/MediaBrowser.Server.Implementations/Localization/Server/ar.json index bb05037f9a..5d7ebaffba 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ar.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ar.json @@ -192,15 +192,25 @@ "TabUpcoming": "\u0627\u0644\u0642\u0627\u062f\u0645", "HeaderPhotoInfo": "Photo Info", "TabShows": "\u0627\u0644\u0645\u0633\u0644\u0633\u0644\u0627\u062a", + "HeaderInstall": "Install", "TabEpisodes": "\u0627\u0644\u062d\u0644\u0642\u0627\u062a", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "\u0627\u0646\u0648\u0627\u0639", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "\u0627\u0644\u0646\u0627\u0633", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "\u0627\u0644\u0634\u0628\u0643\u0627\u062a", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "\u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646", + "HeaderReviews": "Reviews", "HeaderFilters": "\u0641\u0644\u062a\u0631\u0627\u062a:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "\u0641\u0644\u062a\u0631", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "\u0627\u0644\u0645\u0641\u0636\u0644\u0627\u062a", + "ButtonViewWebsite": "View website", "OptionLikes": "\u0645\u062d\u0628\u0628", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "\u0645\u0643\u0631\u0648\u0647", "OptionActors": "\u0627\u0644\u0645\u0645\u062b\u0644\u0648\u0646", "OptionGuestStars": "\u0636\u064a\u0648\u0641", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ca.json b/MediaBrowser.Server.Implementations/Localization/Server/ca.json index 36d831887b..8b72f1dc2d 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ca.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ca.json @@ -192,15 +192,25 @@ "TabUpcoming": "Upcoming", "HeaderPhotoInfo": "Photo Info", "TabShows": "Shows", + "HeaderInstall": "Install", "TabEpisodes": "Episodes", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "Genres", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "People", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "Networks", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Users", + "HeaderReviews": "Reviews", "HeaderFilters": "Filters:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filter", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favorites", + "ButtonViewWebsite": "View website", "OptionLikes": "Likes", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Dislikes", "OptionActors": "Actors", "OptionGuestStars": "Guest Stars", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/da.json b/MediaBrowser.Server.Implementations/Localization/Server/da.json index 6d3e9bc042..87fc9288fd 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/da.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/da.json @@ -192,15 +192,25 @@ "TabUpcoming": "Kommende", "HeaderPhotoInfo": "Photo Info", "TabShows": "Shows", + "HeaderInstall": "Install", "TabEpisodes": "Episoder", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "Genre", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "Personer", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "Netv\u00e6rk", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Brugere", + "HeaderReviews": "Reviews", "HeaderFilters": "Filtre:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filter", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favoritter", + "ButtonViewWebsite": "View website", "OptionLikes": "Likes", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Dislikes", "OptionActors": "Skuespillere", "OptionGuestStars": "G\u00e6ste Stjerner", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/de.json b/MediaBrowser.Server.Implementations/Localization/Server/de.json index 907c466d0e..361bd42c8d 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/de.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/de.json @@ -158,7 +158,7 @@ "LabelNewPasswordConfirm": "Neues Passwort wiederhohlen:", "OptionMakeOneTimeDonation": "Mache eine einmalige Spende", "HeaderCreatePassword": "Erstelle Passwort", - "OptionOneTimeDescription": "This is an additional donation to the team to show your support. It does not have any additional benefits.", + "OptionOneTimeDescription": "Das ist eine zus\u00e4tzliche Spende an das Team, um deine Unterst\u00fctzung zu zeigen. Dies bringt keine zus\u00e4tzlichen Vorteile.", "LabelCurrentPassword": "Aktuelles Passwort:", "OptionLifeTimeSupporterClubMembership": "Lebensl\u00e4ngliche Unterst\u00fctzer Club Mitgliedschaft", "LabelMaxParentalRating": "H\u00f6chste erlaubte elterlich Bewertung:", @@ -184,23 +184,33 @@ "MessageNothingHere": "Nichts hier.", "OptionWriter": "Drehbuchautor", "MessagePleaseEnsureInternetMetadata": "Bitte sicherstellen, dass das Herunterladen von Internet Metadaten aktiviert ist.", - "LabelAirDays": "Air days:", + "LabelAirDays": "Ausstrahlungstage:", "TabSuggested": "Vorgeschlagen", - "LabelAirTime": "Air time:", + "LabelAirTime": "Ausstrahlungszeit:", "TabLatest": "Neueste", - "HeaderMediaInfo": "Media Info", + "HeaderMediaInfo": "Medieninformation", "TabUpcoming": "Bevorstehend", - "HeaderPhotoInfo": "Photo Info", + "HeaderPhotoInfo": "Fotoinformation", "TabShows": "Shows", + "HeaderInstall": "Install", "TabEpisodes": "Episoden", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "Genres", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "Personen", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "Sendergruppen", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Benutzer", + "HeaderReviews": "Reviews", "HeaderFilters": "Filter:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filter", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favoriten", + "ButtonViewWebsite": "View website", "OptionLikes": "Likes", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Dislikes", "OptionActors": "Darsteller", "OptionGuestStars": "Gaststar", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/el.json b/MediaBrowser.Server.Implementations/Localization/Server/el.json index 2923d3a9fa..a7ab23633c 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/el.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/el.json @@ -192,15 +192,25 @@ "TabUpcoming": "\u0395\u03c0\u03b5\u03c1\u03c7\u03cc\u03bc\u03b5\u03bd\u03b7", "HeaderPhotoInfo": "Photo Info", "TabShows": "\u0395\u03c0\u03b5\u03b9\u03c3\u03cc\u03b4\u03b9\u03b1", + "HeaderInstall": "Install", "TabEpisodes": "\u0395\u03c0\u03b5\u03b9\u03c3\u03cc\u03b4\u03b9\u03b1", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "\u0395\u03af\u03b4\u03b7", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "\u0386\u03bd\u03b8\u03c1\u03c9\u03c0\u03bf\u03b9 ", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "\u0394\u03af\u03ba\u03c4\u03c5\u03b1", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "\u03a7\u03c1\u03ae\u03c3\u03c4\u03b5\u03c2 ", + "HeaderReviews": "Reviews", "HeaderFilters": "\u03a6\u03af\u03bb\u03c4\u03c1\u03b1", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "\u03c6\u03af\u03bb\u03c4\u03c1\u03bf", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "\u0391\u03b3\u03b1\u03c0\u03b7\u03bc\u03ad\u03bd\u03b1", + "ButtonViewWebsite": "View website", "OptionLikes": "\u03a3\u03c5\u03bc\u03c0\u03b1\u03b8\u03b5\u03af", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "\u0391\u03bd\u03c4\u03b9\u03c0\u03b1\u03b8\u03b5\u03af", "OptionActors": "\u0397\u03b8\u03bf\u03c0\u03bf\u03b9\u03bf\u03af", "OptionGuestStars": "\u0393\u03ba\u03b5\u03c3\u03c4 \u03c3\u03c4\u03b1\u03c1", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json b/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json index 7d328c042c..7209c0e622 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json @@ -192,15 +192,25 @@ "TabUpcoming": "Upcoming", "HeaderPhotoInfo": "Photo Info", "TabShows": "Shows", + "HeaderInstall": "Install", "TabEpisodes": "Episodes", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "Genres", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "People", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "Networks", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Users", + "HeaderReviews": "Reviews", "HeaderFilters": "Filters:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filter", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favourites", + "ButtonViewWebsite": "View website", "OptionLikes": "Likes", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Dislikes", "OptionActors": "Actors", "OptionGuestStars": "Guest Stars", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/en_US.json b/MediaBrowser.Server.Implementations/Localization/Server/en_US.json index 79f5001b89..29c870d395 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/en_US.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/en_US.json @@ -192,15 +192,25 @@ "TabUpcoming": "Upcoming", "HeaderPhotoInfo": "Photo Info", "TabShows": "Shows", + "HeaderInstall": "Install", "TabEpisodes": "Episodes", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "Genres", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "People", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "Networks", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Users", + "HeaderReviews": "Reviews", "HeaderFilters": "Filters:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filter", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favorites", + "ButtonViewWebsite": "View website", "OptionLikes": "Likes", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Dislikes", "OptionActors": "Actors", "OptionGuestStars": "Guest Stars", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/es.json b/MediaBrowser.Server.Implementations/Localization/Server/es.json index 4b8bb6cc6e..a376fbbf14 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/es.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/es.json @@ -192,15 +192,25 @@ "TabUpcoming": "Pr\u00f3ximos", "HeaderPhotoInfo": "Photo Info", "TabShows": "Programas", + "HeaderInstall": "Install", "TabEpisodes": "Episodios", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "G\u00e9neros", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "Gente", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "redes", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Usuarios", + "HeaderReviews": "Reviews", "HeaderFilters": "Filtros:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filtro", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favoritos", + "ButtonViewWebsite": "View website", "OptionLikes": "Me gusta", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "No me gusta", "OptionActors": "Actores", "OptionGuestStars": "Estrellas invitadas", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json index d040bdc235..f6981335d7 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json @@ -156,9 +156,9 @@ "LabelNewPassword": "Nueva contrase\u00f1a:", "HeaderDonationType": "Tipo de Donaci\u00f3n:", "LabelNewPasswordConfirm": "Confirmaci\u00f3n de contrase\u00f1a nueva:", - "OptionMakeOneTimeDonation": "Hacer una donaci\u00f3n \u00fanica", + "OptionMakeOneTimeDonation": "Hacer una donaci\u00f3n independiente", "HeaderCreatePassword": "Crear Contrase\u00f1a", - "OptionOneTimeDescription": "This is an additional donation to the team to show your support. It does not have any additional benefits.", + "OptionOneTimeDescription": "Esta es una donaci\u00f3n adicional para mostrar tu apoyo al equipo. No tiene ning\u00fan beneficio adicional.", "LabelCurrentPassword": "Contrase\u00f1a actual:", "OptionLifeTimeSupporterClubMembership": "Membres\u00eda vitalicia del club de aficionados", "LabelMaxParentalRating": "M\u00e1xima clasificaci\u00f3n parental permitida:", @@ -184,23 +184,33 @@ "MessageNothingHere": "Nada aqu\u00ed.", "OptionWriter": "Escritor", "MessagePleaseEnsureInternetMetadata": "Por favor aseg\u00farese que la descarga de metadatos de internet esta habilitada.", - "LabelAirDays": "Air days:", + "LabelAirDays": "Se emite los d\u00edas:", "TabSuggested": "Sugerencias", - "LabelAirTime": "Air time:", + "LabelAirTime": "Duraci\u00f3n:", "TabLatest": "Recientes", - "HeaderMediaInfo": "Media Info", + "HeaderMediaInfo": "Info del Medio:", "TabUpcoming": "Por Estrenar", - "HeaderPhotoInfo": "Photo Info", + "HeaderPhotoInfo": "Info de Fotograf\u00eda:", "TabShows": "Programas", + "HeaderInstall": "Install", "TabEpisodes": "Episodios", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "G\u00e9neros", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "Personas", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "Cadenas", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Usuarios", + "HeaderReviews": "Reviews", "HeaderFilters": "Filtros:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filtro", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favoritos", + "ButtonViewWebsite": "View website", "OptionLikes": "Me gusta", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "No me gusta", "OptionActors": "Actores", "OptionGuestStars": "Estrellas Invitadas", @@ -225,7 +235,7 @@ "OptionAscending": "Ascendente", "OptionDescending": "Descendente", "OptionRuntime": "Duraci\u00f3n", - "OptionReleaseDate": "Release Date", + "OptionReleaseDate": "Fecha de Liberaci\u00f3n", "OptionPlayCount": "N\u00famero de Reproducc.", "OptionDatePlayed": "Fecha de Reproducci\u00f3n", "OptionDateAdded": "Fecha de Adici\u00f3n", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/fr.json b/MediaBrowser.Server.Implementations/Localization/Server/fr.json index f0d030f4d1..a8ca45785f 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/fr.json @@ -192,15 +192,25 @@ "TabUpcoming": "\u00c0 venir", "HeaderPhotoInfo": "Photo Info", "TabShows": "S\u00e9ries", + "HeaderInstall": "Install", "TabEpisodes": "\u00c9pisodes", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "Genres", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "Personnes", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "R\u00e9seaux", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Utilisateurs", + "HeaderReviews": "Reviews", "HeaderFilters": "Filtres:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filtre", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favoris", + "ButtonViewWebsite": "View website", "OptionLikes": "Aim\u00e9s", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Non aim\u00e9s", "OptionActors": "Acteurs", "OptionGuestStars": "Guest Stars", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/he.json b/MediaBrowser.Server.Implementations/Localization/Server/he.json index 70b2bfe84a..8f828e6ce2 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/he.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/he.json @@ -192,15 +192,25 @@ "TabUpcoming": "\u05d1\u05e7\u05e8\u05d5\u05d1", "HeaderPhotoInfo": "Photo Info", "TabShows": "\u05ea\u05d5\u05db\u05e0\u05d9\u05d5\u05ea", + "HeaderInstall": "Install", "TabEpisodes": "\u05e4\u05e8\u05e7\u05d9\u05dd", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "\u05d6\u05d0\u05e0\u05e8\u05d9\u05dd", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "\u05d0\u05e0\u05e9\u05d9\u05dd", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "\u05e8\u05e9\u05ea\u05d5\u05ea", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "\u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd", + "HeaderReviews": "Reviews", "HeaderFilters": "\u05de\u05e1\u05e0\u05e0\u05d9\u05dd:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "\u05de\u05e1\u05e0\u05df", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "\u05de\u05d5\u05e2\u05d3\u05e4\u05d9\u05dd", + "ButtonViewWebsite": "View website", "OptionLikes": "\u05e0\u05d1\u05d7\u05e8\u05d9\u05dd", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "\u05dc\u05d0 \u05d0\u05d5\u05d4\u05d1", "OptionActors": "\u05e9\u05d7\u05e7\u05e0\u05d9\u05dd", "OptionGuestStars": "\u05e9\u05d7\u05e7\u05df \u05d0\u05d5\u05e8\u05d7", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/it.json b/MediaBrowser.Server.Implementations/Localization/Server/it.json index a8ffcc2eb4..88820c2c15 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/it.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/it.json @@ -192,15 +192,25 @@ "TabUpcoming": "IN ONDA A BREVE", "HeaderPhotoInfo": "Photo Info", "TabShows": "Serie", + "HeaderInstall": "Install", "TabEpisodes": "Episodi", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "Generi", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "Attori", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "Internet", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Utenti", + "HeaderReviews": "Reviews", "HeaderFilters": "Filtri", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filtro", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Preferiti", + "ButtonViewWebsite": "View website", "OptionLikes": "Belli", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Brutti", "OptionActors": "Attori", "OptionGuestStars": "Guest Stars", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/kk.json b/MediaBrowser.Server.Implementations/Localization/Server/kk.json index bf0fd1212f..eb30d69fd6 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/kk.json @@ -66,7 +66,7 @@ "LabelEnableAutomaticPortMapping": "\u041f\u043e\u0440\u0442 \u0430\u0432\u0442\u043e\u0441\u0430\u043b\u0493\u0430\u0441\u0442\u044b\u0440\u0443\u044b\u043d \u049b\u043e\u0441\u0443", "LabelCommunityRating": "\u049a\u0430\u0443\u044b\u043c \u0431\u0430\u0493\u0430\u043b\u0430\u0443\u044b:", "LabelEnableAutomaticPortMappingHelp": "UPnP \u049b\u0430\u0448\u044b\u049b\u0442\u0430\u043d \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0443\u0434\u044b \u0436\u0435\u04a3\u0456\u043b\u0434\u0435\u0442\u0443 \u04af\u0448\u0456\u043d \u0440\u043e\u0443\u0442\u0435\u0440\u0434\u0456 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0442\u044b \u0442\u04af\u0440\u0434\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043b\u0430\u0443\u0493\u0430 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0435\u0434\u0456. \u0411\u04b1\u043b \u043a\u0435\u0439\u0431\u0456\u0440 \u0440\u043e\u0443\u0442\u0435\u0440 \u04b1\u043b\u0433\u0456\u043b\u0435\u0440\u0456\u043c\u0435\u043d \u0436\u04b1\u043c\u044b\u0441 \u0456\u0441\u0442\u0435\u043c\u0435\u0439\u0442\u0456\u043d\u0456 \u043c\u04af\u043c\u043a\u0456\u043d.", - "LabelVoteCount": "\u0414\u0430\u0443\u044b\u0441 \u0441\u0430\u043d\u044b:", + "LabelVoteCount": "\u0414\u0430\u0443\u044b\u0441 \u0435\u0441\u0435\u0431\u0456:", "ButtonOk": "\u0416\u0430\u0440\u0430\u0439\u0434\u044b", "LabelMetascore": "Metascore \u0431\u0430\u0493\u0430\u043b\u0430\u0443\u044b:", "ButtonCancel": "\u0411\u043e\u043b\u0434\u044b\u0440\u043c\u0430\u0443", @@ -96,7 +96,7 @@ "LabelDownloadInternetMetadata": "\u0421\u0443\u0440\u0435\u0442\u0442\u0435\u043c\u0435 \u043c\u0435\u043d \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0456 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0442\u0435\u043d \u0436\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u0443", "LabelAirTime:": "\u042d\u0444\u0438\u0440 \u0443\u0430\u049b\u044b\u0442\u044b", "LabelDownloadInternetMetadataHelp": "\u0422\u043e\u043b\u044b \u043a\u04e9\u0440\u0441\u0435\u0442\u0456\u043b\u0456\u043c\u0434\u0435\u0440\u0434\u0456 \u049b\u043e\u0441\u0443 \u04af\u0448\u0456\u043d Media Browser \u0442\u0430\u0441\u0443\u0448\u044b\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u0442\u0443\u0440\u0430\u043b\u044b \u043c\u04d9\u043b\u0456\u043c\u0435\u0442\u0442\u0435\u0440\u0434\u0456 \u0436\u04af\u043a\u0442\u0435\u0443\u0456 \u043c\u04af\u043c\u043a\u0456\u043d.", - "LabelRuntimeMinutes": "\u041e\u0440\u044b\u043d\u0434\u0430\u043b\u0443 \u0443\u0430\u049b\u044b\u0442\u044b, \u043c\u0438\u043d:", + "LabelRuntimeMinutes": "\u04b0\u0437\u0430\u049b\u0442\u044b\u0493\u044b, \u043c\u0438\u043d:", "TabPreferences": "\u0422\u0435\u04a3\u0448\u0435\u043b\u0456\u043c\u0434\u0435\u0440", "LabelParentalRating": "\u0416\u0430\u0441\u0442\u0430\u0441 \u0441\u0430\u043d\u0430\u0442\u044b:", "TabPassword": "\u049a\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437", @@ -156,9 +156,9 @@ "LabelNewPassword": "\u0416\u0430\u04a3\u0430 \u049b\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437", "HeaderDonationType": "\u049a\u0430\u0439\u044b\u0440\u043c\u0430\u043b\u0434\u044b\u049b \u0442\u04af\u0440\u0456:", "LabelNewPasswordConfirm": "\u0416\u0430\u04a3\u0430 \u049b\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437\u0434\u0456 \u0440\u0430\u0441\u0442\u0430\u0443:", - "OptionMakeOneTimeDonation": "\u0411\u0456\u0440 \u0440\u0435\u0442 \u049b\u0430\u0439\u044b\u0440\u043c\u0430\u043b\u0434\u044b\u049b \u0436\u0430\u0441\u0430\u0443", + "OptionMakeOneTimeDonation": "\u0411\u04e9\u043b\u0435\u043a \u049b\u0430\u0439\u044b\u0440\u043c\u0430\u043b\u0434\u044b\u049b \u0436\u0430\u0441\u0430\u0443", "HeaderCreatePassword": "\u049a\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437\u0434\u0456 \u0436\u0430\u0441\u0430\u0443", - "OptionOneTimeDescription": "This is an additional donation to the team to show your support. It does not have any additional benefits.", + "OptionOneTimeDescription": "\u0411\u04b1\u043b \u049b\u043e\u043b\u0434\u0430\u0443\u044b\u04a3\u044b\u0437\u0434\u044b \u043a\u04e9\u0440\u0441\u0435\u0442\u0443 \u04af\u0448\u0456\u043d \u0442\u043e\u043f\u049b\u0430 \u049b\u043e\u0441\u044b\u043c\u0448\u0430 \u049b\u0430\u0439\u044b\u0440\u043c\u0430\u043b\u0434\u044b\u049b. \u0415\u0448\u049b\u0430\u043d\u0434\u0430\u0439 \u049b\u043e\u0441\u044b\u043c\u0448\u0430 \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u0440 \u0431\u043e\u043b\u043c\u0430\u0439\u0434\u044b.", "LabelCurrentPassword": "\u0410\u0493\u044b\u043c\u0434\u0430\u0493\u044b \u049b\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437:", "OptionLifeTimeSupporterClubMembership": "\u049a\u043e\u043b\u0434\u0430\u0443\u0448\u044b \u043a\u043b\u0443\u0431\u044b\u043d\u044b\u04a3 \u0493\u04b1\u043c\u044b\u0440\u043b\u044b\u049b \u043c\u04af\u0448\u0435\u043b\u0456\u0433\u0456", "LabelMaxParentalRating": "\u0420\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0456\u043b\u0433\u0435\u043d \u0435\u04a3 \u0436\u043e\u0493\u0430\u0440\u044b \u0436\u0430\u0441\u0442\u0430\u0441 \u0441\u0430\u043d\u0430\u0442\u044b:", @@ -184,23 +184,33 @@ "MessageNothingHere": "\u041e\u0441\u044b\u043d\u0434\u0430 \u0435\u0448\u0442\u0435\u043c\u0435 \u0436\u043e\u049b.", "OptionWriter": "\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439\u0448\u0456", "MessagePleaseEnsureInternetMetadata": "\u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0442\u0435\u043d \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0456 \u0436\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u0443\u044b \u049b\u043e\u0441\u044b\u043b\u0493\u0430\u043d\u044b\u043d \u0442\u0435\u043a\u0441\u0435\u0440\u0456\u04a3\u0456\u0437.", - "LabelAirDays": "Air days:", + "LabelAirDays": "\u042d\u0444\u0438\u0440 \u043a\u04af\u043d\u0434\u0435\u0440\u0456:", "TabSuggested": "\u04b0\u0441\u044b\u043d\u044b\u043b\u0493\u0430\u043d", - "LabelAirTime": "Air time:", + "LabelAirTime": "\u042d\u0444\u0438\u0440 \u0443\u0430\u049b\u044b\u0442\u044b:", "TabLatest": "\u0415\u04a3 \u043a\u0435\u0439\u0456\u043d\u0433\u0456", - "HeaderMediaInfo": "Media Info", + "HeaderMediaInfo": "\u0422\u0430\u0441\u0443\u0448\u044b\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u043c\u04d9\u043b\u0456\u043c\u0435\u0442\u0456", "TabUpcoming": "\u041a\u04af\u0442\u0456\u043b\u0433\u0435\u043d", - "HeaderPhotoInfo": "Photo Info", + "HeaderPhotoInfo": "\u0424\u043e\u0442\u043e\u0441\u0443\u0440\u0435\u0442 \u043c\u04d9\u043b\u0456\u043c\u0435\u0442\u0456", "TabShows": "\u041a\u04e9\u0440\u0441\u0435\u0442\u0456\u043c\u0434\u0435\u0440", + "HeaderInstall": "\u041e\u0440\u043d\u0430\u0442\u0443", "TabEpisodes": "\u042d\u043f\u0438\u0437\u043e\u0434\u0442\u0430\u0440", + "LabelSelectVersionToInstall": "\u041e\u0440\u043d\u0430\u0442\u044b\u043c \u043d\u04b1\u0441\u049b\u0430\u0441\u044b\u043d \u0442\u0430\u04a3\u0434\u0430\u0443:", "TabGenres": "\u0416\u0430\u043d\u0440\u043b\u0430\u0440", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "\u0410\u0434\u0430\u043c\u0434\u0430\u0440", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "\u0422\u0414 \u0436\u0435\u043b\u0456\u043b\u0435\u0440\u0456", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "\u041f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043b\u0430\u0440", + "HeaderReviews": "\u041f\u0456\u043a\u0456\u0440\u043b\u0435\u0440", "HeaderFilters": "\u0421\u04af\u0437\u0433\u0456\u043b\u0435\u0440:", + "HeaderDeveloperInfo": "\u0416\u0430\u0441\u0430\u049b\u0442\u0430\u0443\u0448\u044b \u0442\u0443\u0440\u0430\u043b\u044b", "ButtonFilter": "\u0421\u04af\u0437\u0443", + "HeaderRevisionHistory": "\u04e8\u0437\u0433\u0435\u0440\u0456\u0441\u0442\u0435\u0440 \u0442\u0430\u0440\u0438\u0445\u044b", "OptionFavorite": "\u0422\u0430\u04a3\u0434\u0430\u0443\u043b\u044b\u043b\u0430\u0440", + "ButtonViewWebsite": "\u0492\u0430\u043b\u0430\u043c\u0442\u043e\u0440 \u0441\u0430\u0439\u0442\u044b\u043d \u049b\u0430\u0440\u0430\u0443", "OptionLikes": "\u04b0\u043d\u0430\u0442\u0443\u043b\u0430\u0440", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "\u04b0\u043d\u0430\u0442\u043f\u0430\u0443\u043b\u0430\u0440", "OptionActors": "\u0410\u043a\u0442\u0435\u0440\u043b\u0435\u0440", "OptionGuestStars": "\u0428\u0430\u049b\u044b\u0440\u044b\u043b\u0493\u0430\u043d \u0430\u043a\u0442\u0435\u0440\u043b\u0435\u0440", @@ -224,9 +234,9 @@ "OptionUnplayed": "\u041e\u0439\u043d\u0430\u0442\u044b\u043b\u043c\u0430\u0493\u0430\u043d", "OptionAscending": "\u0410\u0440\u0442\u0443\u044b \u0431\u043e\u0439\u044b\u043d\u0448\u0430", "OptionDescending": "\u041a\u0435\u043c\u0443\u0456 \u0431\u043e\u0439\u044b\u043d\u0448\u0430", - "OptionRuntime": "\u041e\u0440\u044b\u043d\u0434\u0430\u0443 \u0443\u0430\u049b\u044b\u0442\u044b", + "OptionRuntime": "\u04b0\u0437\u0430\u049b\u0442\u044b\u0493\u044b", "OptionReleaseDate": "\u0428\u044b\u0493\u0430\u0440\u0443 \u043a\u04af\u043d-\u0430\u0439\u044b", - "OptionPlayCount": "\u041e\u0439\u043d\u0430\u0442\u0443 \u0441\u0430\u043d\u044b", + "OptionPlayCount": "\u041e\u0439\u043d\u0430\u0442\u0443 \u0435\u0441\u0435\u0431\u0456", "OptionDatePlayed": "\u041e\u0439\u043d\u0430\u0442\u044b\u043b\u0493\u0430\u043d \u043a\u04af\u043d-\u0430\u0439\u044b", "OptionDateAdded": "\u04ae\u0441\u0442\u0435\u043b\u0433\u0435\u043d \u043a\u04af\u043d-\u0430\u0439\u044b", "OptionAlbumArtist": "\u0410\u043b\u044c\u0431\u043e\u043c \u043e\u0440\u044b\u043d\u0434\u0430\u0443\u0448\u044b\u0441\u044b", @@ -353,11 +363,11 @@ "LabelRunServerAtStartupHelp": "\u0411\u04b1\u043b Windows \u0436\u04b1\u043c\u044b\u0441\u044b\u043d \u0431\u0430\u0441\u0442\u0430\u0493\u0430\u043d\u0434\u0430 \u0436\u04af\u0439\u0435\u043b\u0456\u043a \u0442\u0430\u049b\u0442\u0430\u0434\u0430\u0493\u044b \u0431\u0435\u043b\u0433\u0456\u0448\u0435 \u0456\u0441\u043a\u0435 \u049b\u043e\u0441\u044b\u043b\u0430\u0434\u044b. Windows \u049b\u044b\u0437\u043c\u0435\u0442\u0456\u043d \u0456\u0441\u043a\u0435 \u049b\u043e\u0441\u0443 \u04af\u0448\u0456\u043d, \u049b\u04b1\u0441\u0431\u0435\u043b\u0433\u0456\u043d\u0456 \u0430\u043b\u044b\u04a3\u044b\u0437 \u0436\u04d9\u043d\u0435 \u049b\u044b\u0437\u043c\u0435\u0442\u0442\u0456 Windows \u049a\u044b\u0437\u043c\u0435\u0442\u0442\u0435\u0440 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0456 \u0430\u0440\u049b\u044b\u043b\u044b \u043e\u0440\u044b\u043d\u0434\u0430\u04a3\u044b\u0437. \u041d\u0430\u0437\u0430\u0440 \u0430\u0443\u0434\u0430\u0440\u044b\u04a3\u044b\u0437! \u0411\u04b1\u043b \u0435\u043a\u0435\u0443\u0456\u043d \u0441\u043e\u043b \u043c\u0435\u0437\u0433\u0456\u043b\u0434\u0435 \u0431\u0456\u0440\u0433\u0435 \u043e\u0440\u044b\u043d\u0434\u0430\u0443 \u043c\u04af\u043c\u043a\u0456\u043d \u0435\u043c\u0435\u0441, \u0441\u043e\u043d\u044b\u043c\u0435\u043d \u049b\u044b\u0437\u043c\u0435\u0442\u0442\u0456 \u0456\u0441\u043a\u0435 \u049b\u043e\u0441\u0443 \u0430\u043b\u0434\u044b\u043d\u0430\u043d \u0436\u04af\u0439\u0435\u043b\u0456\u043a \u0442\u0430\u049b\u0442\u0430\u0434\u0430\u0493\u044b \u0431\u0435\u043b\u0433\u0456\u0448\u0435\u0434\u0435\u043d \u0448\u044b\u0493\u044b\u04a3\u044b\u0437.", "ButtonSelectDirectory": "\u049a\u0430\u0442\u0430\u043b\u043e\u0433\u0442\u044b \u0431\u04e9\u043b\u0435\u043a\u0442\u0435\u0443", "LabelCustomPaths": "\u049a\u0430\u043b\u0430\u0443\u044b\u04a3\u044b\u0437 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0442\u0435\u04a3\u0448\u0435\u043b\u0433\u0435\u043d \u0436\u043e\u043b\u0434\u0430\u0440\u0434\u044b \u0430\u043d\u044b\u049b\u0442\u0430\u04a3\u044b\u0437. \u04d8\u0434\u0435\u043f\u043a\u0456\u043b\u0435\u0440\u0434\u0456 \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443 \u04af\u0448\u0456\u043d \u04e9\u0440\u0456\u0441\u0442\u0435\u0440\u0434\u0456 \u0431\u043e\u0441 \u049b\u0430\u043b\u0434\u044b\u0440\u044b\u04a3\u044b\u0437.", - "LabelCachePath": "Cache \u049b\u0430\u043b\u0442\u0430\u0441\u044b\u043d\u044b\u04a3 \u0436\u043e\u043b\u044b:", + "LabelCachePath": "\u041a\u0435\u0448\u043a\u0435 \u049b\u0430\u0440\u0430\u0439 \u0436\u043e\u043b:", "LabelCachePathHelp": "\u0421\u0443\u0440\u0435\u0442 \u0441\u0438\u044f\u049b\u0442\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0434\u0456\u04a3 \u043a\u044d\u0448 \u0444\u0430\u0439\u043b\u0434\u0430\u0440\u044b \u04af\u0448\u0456\u043d \u0442\u0435\u04a3\u0448\u0435\u043b\u0433\u0435\u043d \u0436\u0430\u0439\u0493\u0430\u0441\u044b\u043c\u0434\u044b \u0430\u043d\u044b\u049b\u0442\u0430\u04a3\u044b\u0437.", - "LabelImagesByNamePath": "Images by name \u049b\u0430\u043b\u0442\u0430\u0441\u044b\u043d\u044b\u04a3 \u0436\u043e\u043b\u044b:", + "LabelImagesByNamePath": "\u0410\u0442\u044b \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0433\u0435 \u049b\u0430\u0440\u0430\u0439 \u0436\u043e\u043b:", "LabelImagesByNamePathHelp": "\u0416\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u044b\u043d\u0493\u0430\u043d \u0430\u043a\u0442\u0435\u0440, \u043e\u0440\u044b\u043d\u0434\u0430\u0443\u0448\u044b, \u0436\u0430\u043d\u0440, \u0436\u04d9\u043d\u0435 \u0441\u0442\u0443\u0434\u0438\u044f \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0456 \u04af\u0448\u0456\u043d \u0442\u0435\u04a3\u0448\u0435\u043b\u0433\u0435\u043d \u0436\u0430\u0439\u0493\u0430\u0441\u044b\u043c\u0434\u044b \u0430\u043d\u044b\u049b\u0442\u0430\u04a3\u044b\u0437.", - "LabelMetadataPath": "Metadata \u049b\u0430\u043b\u0442\u0430\u0441\u044b\u043d\u044b\u04a3 \u0436\u043e\u043b\u044b:", + "LabelMetadataPath": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0433\u0435 \u049b\u0430\u0440\u0430\u0439 \u0436\u043e\u043b:", "LabelMetadataPathHelp": "\u0416\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u044b\u043d\u0493\u0430\u043d \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u043c\u0435\u043b\u0435\u0440 \u0431\u0435\u043d \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u04af\u0448\u0456\u043d \u0442\u0435\u04a3\u0448\u0435\u043b\u0433\u0435\u043d \u0436\u0430\u0439\u0493\u0430\u0441\u044b\u043c\u0434\u044b \u0430\u043d\u044b\u049b\u0442\u0430\u04a3\u044b\u0437.", "LabelTranscodingTempPath": "Transcoding temporary \u049b\u0430\u043b\u0442\u0430\u0441\u044b\u043d\u044b\u04a3 \u0436\u043e\u043b\u044b:", "LabelTranscodingTempPathHelp": "\u0411\u04b1\u043b \u049b\u0430\u043b\u0442\u0430 \u049b\u04b1\u0440\u0430\u043c\u044b\u043d\u0434\u0430 \u049b\u0430\u0439\u0442\u0430 \u043a\u043e\u0434\u0442\u0430\u0443 \u049b\u04b1\u0440\u0430\u043b\u044b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0430\u0442\u044b\u043d \u0436\u04b1\u043c\u044b\u0441 \u0444\u0430\u0439\u043b\u0434\u0430\u0440\u044b \u0431\u0430\u0440. \u0422\u0435\u04a3\u0448\u0435\u043b\u0433\u0435\u043d \u0436\u043e\u043b\u0434\u044b \u0430\u043d\u044b\u049b\u0442\u0430\u04a3\u044b\u0437, \u043d\u0435\u043c\u0435\u0441\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0434\u0456\u04a3 \u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u049b\u0430\u043b\u0442\u0430\u0441\u044b \u0456\u0448\u0456\u043d\u0434\u0435\u0433\u0456 \u04d9\u0434\u0435\u043f\u043a\u0456\u0441\u0456\u043d \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443 \u04af\u0448\u0456\u043d \u0431\u043e\u0441 \u049b\u0430\u043b\u0434\u044b\u0440\u044b\u04a3\u044b\u0437.", @@ -937,7 +947,7 @@ "OptionLatestTvRecordings": "\u0415\u04a3 \u043a\u0435\u0439\u0456\u043d\u0433\u0456 \u0436\u0430\u0437\u0431\u0430\u043b\u0430\u0440", "LabelProtocolInfo": "\u041f\u0440\u043e\u0442\u043e\u049b\u043e\u043b \u0430\u049b\u043f\u0430\u0440\u0430\u0442\u044b:", "LabelProtocolInfoHelp": "\u0411\u04b1\u043b \u043c\u04d9\u043d \u0436\u0430\u0431\u0434\u044b\u049b\u0442\u044b\u04a3 GetProtocolInfo \u0441\u04b1\u0440\u0430\u043d\u044b\u0441\u0442\u0430\u0440\u044b\u043d\u0430 \u0436\u0430\u0443\u0430\u043f \u0431\u0435\u0440\u0433\u0435\u043d\u0434\u0435 \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u043b\u0430\u0434\u044b.", - "TabXbmcMetadata": "Xbmc", + "TabXbmcMetadata": "XBMC", "HeaderXbmcMetadataHelp": "Media Browser \u0431\u0430\u0493\u0434\u0430\u0440\u043b\u0430\u043c\u0430\u0441\u044b Xbmc Nfo \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0442\u0435\u0440\u0456\u043d\u0456\u04a3 \u0436\u04d9\u043d\u0435 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0456\u043d\u0456\u04a3 \u043a\u0456\u0440\u0456\u043a\u0442\u0456\u0440\u043c\u0435 \u049b\u043e\u043b\u0434\u0430\u0443\u044b\u043d \u049b\u0430\u043c\u0442\u0438\u0434\u044b. Xbmc \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0456\u043d \u049b\u043e\u0441\u0443 \u043d\u0435\u043c\u0435\u0441\u0435 \u04e9\u0448\u0456\u0440\u0443 \u04af\u0448\u0456\u043d \u049a\u044b\u0437\u043c\u0435\u0442\u0442\u0435\u0440 \u049b\u043e\u0439\u044b\u043d\u0434\u044b\u0441\u044b\u043d\u0434\u0430\u0493\u044b \u0442\u0430\u0441\u0443\u0448\u044b \u0442\u04af\u0440\u043b\u0435\u0440\u0456\u043d\u0435 \u0430\u0440\u043d\u0430\u043b\u0493\u0430\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043b\u0435\u0440\u0434\u0456 \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u04a3\u044b\u0437.", "LabelXbmcMetadataUser": "\u041f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043d\u044b\u04a3 \u049b\u0430\u0440\u0430\u0443 \u043a\u04af\u0439\u0456\u043d nfo \u04af\u0448\u0456\u043d \u043c\u044b\u043d\u0430\u0493\u0430\u043d \u049b\u043e\u0441\u0443:", "LabelXbmcMetadataUserHelp": "\u041a\u04e9\u0440\u0456\u043b\u0433\u0435\u043d \u043a\u04af\u0439\u0434\u0456 Media Browser \u0436\u04d9\u043d\u0435 Xbmc \u0430\u0440\u0430\u0441\u044b\u043d\u0434\u0430 \u04af\u0439\u043b\u0435\u0441\u0442\u0456\u0440\u0456\u043f \u0442\u04b1\u0440\u0443 \u04af\u0448\u0456\u043d \u0431\u04b1\u043d\u044b \u049b\u043e\u0441\u044b\u04a3\u044b\u0437.", @@ -965,11 +975,11 @@ "OptionList": "\u0422\u0456\u0437\u0456\u043c", "TabDashboard": "\u0411\u0430\u049b\u044b\u043b\u0430\u0443 \u0442\u0430\u049b\u0442\u0430\u0441\u044b", "TitleServer": "\u0421\u0435\u0440\u0432\u0435\u0440", - "LabelCache": "Cache:", - "LabelLogs": "Logs:", - "LabelMetadata": "Metadata:", - "LabelImagesByName": "Images by name:", - "LabelTranscodingTemporaryFiles": "Transcoding temporary files:", + "LabelCache": "\u041a\u0435\u0448:", + "LabelLogs": "\u0416\u04b1\u0440\u043d\u0430\u043b\u0434\u0430\u0440:", + "LabelMetadata": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440:", + "LabelImagesByName": "\u0410\u0442\u044b \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440:", + "LabelTranscodingTemporaryFiles": "\u049a\u0430\u0439\u0442\u0430 \u043a\u043e\u0434\u0442\u0430\u0443\u044b\u043d\u044b\u04a3 \u0443\u0430\u049b\u044b\u0442\u0448\u0430 \u0444\u0430\u0439\u043b\u0434\u0430\u0440\u044b:", "HeaderLatestMusic": "\u0415\u04a3 \u043a\u0435\u0439\u0456\u043d\u0433\u0456 \u043c\u0443\u0437\u044b\u043a\u0430", "HeaderBranding": "\u0411\u0440\u0435\u043d\u0434\u0438\u04a3\u0433", "HeaderApiKeys": "API \u043a\u0456\u043b\u0442\u0442\u0435\u0440\u0456", @@ -1010,7 +1020,7 @@ "TabSync": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443", "TitleUsers": "\u041f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043b\u0430\u0440", "LabelProtocol": "\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b:", - "OptionProtocolHttp": "Http", + "OptionProtocolHttp": "HTTP", "OptionProtocolHls": "Http \u0422\u0456\u043a\u0435\u043b\u0435\u0439 \u0410\u0493\u044b\u043d (HLS)", "LabelContext": "\u041c\u04d9\u0442\u0456\u043d\u043c\u04d9\u043d:", "OptionContextStreaming": "\u0410\u0493\u044b\u043d\u043c\u0435\u043d \u0442\u0430\u0441\u044b\u043c\u0430\u043b\u0434\u0430\u0443", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ko.json b/MediaBrowser.Server.Implementations/Localization/Server/ko.json index 3a322eba7b..956e4909a0 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ko.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ko.json @@ -192,15 +192,25 @@ "TabUpcoming": "Upcoming", "HeaderPhotoInfo": "Photo Info", "TabShows": "Shows", + "HeaderInstall": "Install", "TabEpisodes": "Episodes", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "Genres", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "People", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "Networks", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Users", + "HeaderReviews": "Reviews", "HeaderFilters": "Filters:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filter", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favorites", + "ButtonViewWebsite": "View website", "OptionLikes": "Likes", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Dislikes", "OptionActors": "Actors", "OptionGuestStars": "Guest Stars", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ms.json b/MediaBrowser.Server.Implementations/Localization/Server/ms.json index 0180f0060b..5311a3875b 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ms.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ms.json @@ -192,15 +192,25 @@ "TabUpcoming": "Upcoming", "HeaderPhotoInfo": "Photo Info", "TabShows": "Shows", + "HeaderInstall": "Install", "TabEpisodes": "Episodes", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "Genres", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "People", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "Networks", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Users", + "HeaderReviews": "Reviews", "HeaderFilters": "Filters:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filter", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favorites", + "ButtonViewWebsite": "View website", "OptionLikes": "Likes", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Dislikes", "OptionActors": "Actors", "OptionGuestStars": "Guest Stars", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/nb.json b/MediaBrowser.Server.Implementations/Localization/Server/nb.json index 21236b2922..5186d9799b 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/nb.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/nb.json @@ -192,15 +192,25 @@ "TabUpcoming": "Kommer", "HeaderPhotoInfo": "Photo Info", "TabShows": "Show", + "HeaderInstall": "Install", "TabEpisodes": "Episoder", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "Sjanger", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "Folk", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "Nettverk", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Bruker", + "HeaderReviews": "Reviews", "HeaderFilters": "Filtre", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filter", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favoritter", + "ButtonViewWebsite": "View website", "OptionLikes": "Liker", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Misliker", "OptionActors": "Skuespiller", "OptionGuestStars": "Gjeste-opptredelser", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/nl.json b/MediaBrowser.Server.Implementations/Localization/Server/nl.json index 8eda36b997..210531a012 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/nl.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/nl.json @@ -158,7 +158,7 @@ "LabelNewPasswordConfirm": "Bevestig nieuw wachtwoord:", "OptionMakeOneTimeDonation": "Doe een eenmalige donatie", "HeaderCreatePassword": "Maak wachtwoord", - "OptionOneTimeDescription": "This is an additional donation to the team to show your support. It does not have any additional benefits.", + "OptionOneTimeDescription": "Dit is een extra donatie voor het team om te laten zien dat je ze steunt. Het geeft geen extra voordelen.", "LabelCurrentPassword": "Huidig wachtwoord", "OptionLifeTimeSupporterClubMembership": "Levenslang supporters club lidmaatschap", "LabelMaxParentalRating": "Maximaal toegestane kijkwijzer classificatie:", @@ -172,35 +172,45 @@ "ButtonDeleteImage": "Verwijder afbeelding", "LabelOneTimeDonationAmount": "Donatie bedrag:", "LabelSelectUsers": "Selecteer gebruikers:", - "OptionActor": "Actor", + "OptionActor": "Acteur", "ButtonUpload": "Uploaden", - "OptionComposer": "Composer", + "OptionComposer": "Componist", "HeaderUploadNewImage": "Nieuwe afbeelding uploaden", - "OptionDirector": "Director", + "OptionDirector": "Regiseur", "LabelDropImageHere": "Afbeelding hier neerzetten", - "OptionGuestStar": "Guest star", + "OptionGuestStar": "Gast ster", "ImageUploadAspectRatioHelp": "1:1 beeldverhouding geadviseerd. Alleen JPG\/PNG.", - "OptionProducer": "Producer", + "OptionProducer": "Producent", "MessageNothingHere": "Lijst is leeg.", - "OptionWriter": "Writer", + "OptionWriter": "Schrijver", "MessagePleaseEnsureInternetMetadata": "Zorg ervoor dat het downloaden van metadata van het internet is ingeschakeld.", - "LabelAirDays": "Air days:", + "LabelAirDays": "Uitzend dagen:", "TabSuggested": "Aanbevolen", - "LabelAirTime": "Air time:", + "LabelAirTime": "Uitzend tijd:", "TabLatest": "Nieuw", - "HeaderMediaInfo": "Media Info", + "HeaderMediaInfo": "Media informatie", "TabUpcoming": "Binnenkort", - "HeaderPhotoInfo": "Photo Info", + "HeaderPhotoInfo": "Foto informatie", "TabShows": "Series", + "HeaderInstall": "Install", "TabEpisodes": "Afleveringen", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "Genres", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "Personen", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "TV-Studio's", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Gebruikers", + "HeaderReviews": "Reviews", "HeaderFilters": "Filters:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filter", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favorieten", + "ButtonViewWebsite": "View website", "OptionLikes": "Leuk", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Niet leuk", "OptionActors": "Acteurs", "OptionGuestStars": "Gast Sterren", @@ -854,15 +864,15 @@ "LabelDisplayPluginsFor": "Toon Plug-ins voor:", "PluginTabMediaBrowserClassic": "MB Classic", "PluginTabMediaBrowserTheater": "MB Theater", - "LabelEpisodeNamePlain": "Episode name", - "LabelSeriesNamePlain": "Series name", + "LabelEpisodeNamePlain": "Naam aflevering", + "LabelSeriesNamePlain": "Naam serie", "ValueSeriesNamePeriod": "Serie.Naam", "ValueSeriesNameUnderscore": "Serie_naam", "ValueEpisodeNamePeriod": "Aflevering.naam", "ValueEpisodeNameUnderscore": "Aflevering_naam", - "LabelSeasonNumberPlain": "Season number", - "LabelEpisodeNumberPlain": "Episode number", - "LabelEndingEpisodeNumberPlain": "Ending episode number", + "LabelSeasonNumberPlain": "nummer seizoen", + "LabelEpisodeNumberPlain": "Nummer aflevering", + "LabelEndingEpisodeNumberPlain": "Laatste nummer aflevering", "HeaderTypeText": "Voer tekst in", "LabelTypeText": "Tekst", "HeaderSearchForSubtitles": "Zoeken naar Ondertitels", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pl.json b/MediaBrowser.Server.Implementations/Localization/Server/pl.json index fcd29a4632..161f4578ce 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pl.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pl.json @@ -192,15 +192,25 @@ "TabUpcoming": "Upcoming", "HeaderPhotoInfo": "Photo Info", "TabShows": "Seriale", + "HeaderInstall": "Install", "TabEpisodes": "Odcinki", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "Rodzaje", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "Osoby", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "Sieci", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "U\u017cytkownicy", + "HeaderReviews": "Reviews", "HeaderFilters": "Filtry:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filtr", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Ulubione", + "ButtonViewWebsite": "View website", "OptionLikes": "Likes", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Dislikes", "OptionActors": "Aktorzy", "OptionGuestStars": "Guest Stars", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json b/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json index fa01486a89..4a8b6d59dc 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json @@ -92,9 +92,9 @@ "LabelSaveLocalMetadata": "Salvar artwork e metadados dentro das pastas da m\u00eddia", "LabelEndDate": "Data final:", "LabelSaveLocalMetadataHelp": "Salvar artwork e metadados diretamente nas pastas da m\u00eddia as deixar\u00e1 em um local f\u00e1cil para edit\u00e1-las.", - "LabelAirDate": "Dias de exibi\u00e7\u00e3o:", + "LabelAirDate": "Dias da exibi\u00e7\u00e3o:", "LabelDownloadInternetMetadata": "Fazer download das imagens e metadados da internet", - "LabelAirTime:": "Hora da exibi\u00e7\u00e3o:", + "LabelAirTime:": "Hor\u00e1rio:", "LabelDownloadInternetMetadataHelp": "O Media Browser pode fazer download das informa\u00e7\u00f5es de sua m\u00eddia para melhorar a apresenta\u00e7\u00e3o.", "LabelRuntimeMinutes": "Dura\u00e7\u00e3o (minutos):", "TabPreferences": "Prefer\u00eancias", @@ -156,9 +156,9 @@ "LabelNewPassword": "Nova senha:", "HeaderDonationType": "Tipo de doa\u00e7\u00e3o:", "LabelNewPasswordConfirm": "Confirmar nova senha:", - "OptionMakeOneTimeDonation": "Fazer doa\u00e7\u00e3o uma \u00fanica vez", + "OptionMakeOneTimeDonation": "Fazer uma doa\u00e7\u00e3o \u00fanica", "HeaderCreatePassword": "Criar Senha", - "OptionOneTimeDescription": "This is an additional donation to the team to show your support. It does not have any additional benefits.", + "OptionOneTimeDescription": "Esta \u00e9 uma doa\u00e7\u00e3o adicional \u00e0 equipe para demonstrar seu apoio. N\u00e3o garante nenhum benef\u00edcio adicional.", "LabelCurrentPassword": "Senha atual:", "OptionLifeTimeSupporterClubMembership": "Filia\u00e7\u00e3o vital\u00edcia do clube do colaborador", "LabelMaxParentalRating": "Classifica\u00e7\u00e3o parental m\u00e1xima permitida:", @@ -184,23 +184,33 @@ "MessageNothingHere": "Nada aqui.", "OptionWriter": "Escritor", "MessagePleaseEnsureInternetMetadata": "Por favor, certifique-se que o download de metadados da internet est\u00e1 habilitado.", - "LabelAirDays": "Air days:", + "LabelAirDays": "Dias da exibi\u00e7\u00e3o:", "TabSuggested": "Sugeridos", - "LabelAirTime": "Air time:", + "LabelAirTime": "Hor\u00e1rio:", "TabLatest": "Recentes", - "HeaderMediaInfo": "Media Info", + "HeaderMediaInfo": "Informa\u00e7\u00f5es da M\u00eddia", "TabUpcoming": "Por Estrear", - "HeaderPhotoInfo": "Photo Info", + "HeaderPhotoInfo": "Informa\u00e7\u00f5es da Foto", "TabShows": "S\u00e9ries", + "HeaderInstall": "Install", "TabEpisodes": "Epis\u00f3dios", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "G\u00eaneros", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "Pessoas", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "Redes", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Usu\u00e1rios", + "HeaderReviews": "Reviews", "HeaderFilters": "Filtros:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filtro", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favoritos", + "ButtonViewWebsite": "View website", "OptionLikes": "Gostei", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "N\u00e3o Gostei", "OptionActors": "Atores", "OptionGuestStars": "Convidados Especiais", @@ -288,7 +298,7 @@ "HeaderStatus": "Status", "OptionContinuing": "Em Exibi\u00e7\u00e3o", "OptionEnded": "Finalizada", - "HeaderAirDays": "Dias de Exibi\u00e7\u00e3o", + "HeaderAirDays": "Dias da Exibi\u00e7\u00e3o", "OptionSunday": "Domingo", "OptionMonday": "Segunda-feira", "OptionTuesday": "Ter\u00e7a-feira", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json b/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json index 359d838d97..2826927cb3 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json @@ -192,15 +192,25 @@ "TabUpcoming": "Pr\u00f3ximos", "HeaderPhotoInfo": "Photo Info", "TabShows": "S\u00e9ries", + "HeaderInstall": "Install", "TabEpisodes": "Epis\u00f3dios", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "G\u00e9neros Art\u00edsticos", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "Pessoas", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "Redes", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Utilizadores", + "HeaderReviews": "Reviews", "HeaderFilters": "Filtros:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filtro", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favoritos", + "ButtonViewWebsite": "View website", "OptionLikes": "Gostos", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "N\u00e3o gostos", "OptionActors": "Actores", "OptionGuestStars": "Actores convidados", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ru.json b/MediaBrowser.Server.Implementations/Localization/Server/ru.json index 2902f716d7..7b437805f7 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ru.json @@ -66,7 +66,7 @@ "LabelEnableAutomaticPortMapping": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u043e\u0432", "LabelCommunityRating": "\u041e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430:", "LabelEnableAutomaticPortMappingHelp": "UPnP \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432.", - "LabelVoteCount": "\u0427\u0438\u0441\u043b\u043e \u0433\u043e\u043b\u043e\u0441\u043e\u0432:", + "LabelVoteCount": "\u041f\u043e\u0434\u0441\u0447\u0451\u0442 \u0433\u043e\u043b\u043e\u0441\u043e\u0432:", "ButtonOk": "\u041e\u041a", "LabelMetascore": "\u041e\u0446\u0435\u043d\u043a\u0430 Metascore:", "ButtonCancel": "\u041e\u0442\u043c\u0435\u043d\u0430", @@ -96,7 +96,7 @@ "LabelDownloadInternetMetadata": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430", "LabelAirTime:": "\u0412\u0440\u0435\u043c\u044f \u044d\u0444\u0438\u0440\u0430:", "LabelDownloadInternetMetadataHelp": "\u0414\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Media Browser.", - "LabelRuntimeMinutes": "\u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u0435\u043d\u0438\u044f, \u043c\u0438\u043d:", + "LabelRuntimeMinutes": "\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043c\u0438\u043d:", "TabPreferences": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438", "LabelParentalRating": "\u0412\u043e\u0437\u0440\u0430\u0441\u0442\u043d\u0430\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f:", "TabPassword": "\u041f\u0430\u0440\u043e\u043b\u044c", @@ -156,9 +156,9 @@ "LabelNewPassword": "\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c", "HeaderDonationType": "\u0422\u0438\u043f \u043f\u043e\u0436\u0435\u0440\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f:", "LabelNewPasswordConfirm": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f", - "OptionMakeOneTimeDonation": "\u041e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u043e\u0436\u0435\u0440\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435", + "OptionMakeOneTimeDonation": "\u041f\u043e\u0436\u0435\u0440\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e", "HeaderCreatePassword": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c", - "OptionOneTimeDescription": "This is an additional donation to the team to show your support. It does not have any additional benefits.", + "OptionOneTimeDescription": "\u042d\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u0436\u0435\u0440\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0443 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443. \u041d\u0435 \u0434\u0430\u0451\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432.", "LabelCurrentPassword": "\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0430\u0440\u043e\u043b\u044c", "OptionLifeTimeSupporterClubMembership": "\u041f\u043e\u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0435 \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u043e \u0432 \u043a\u043b\u0443\u0431\u0435 \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u043e\u0432", "LabelMaxParentalRating": "\u041c\u0430\u043a\u0441. \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u0430\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u043d\u0430\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f:", @@ -184,23 +184,33 @@ "MessageNothingHere": "\u0417\u0434\u0435\u0441\u044c \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e.", "OptionWriter": "\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0441\u0442", "MessagePleaseEnsureInternetMetadata": "\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430.", - "LabelAirDays": "Air days:", + "LabelAirDays": "\u0414\u043d\u0438 \u044d\u0444\u0438\u0440\u0430:", "TabSuggested": "\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435", - "LabelAirTime": "Air time:", + "LabelAirTime": "\u0412\u0440\u0435\u043c\u044f \u044d\u0444\u0438\u0440\u0430:", "TabLatest": "\u041d\u043e\u0432\u0438\u043d\u043a\u0438", - "HeaderMediaInfo": "Media Info", + "HeaderMediaInfo": "\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445", "TabUpcoming": "\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0435", - "HeaderPhotoInfo": "Photo Info", + "HeaderPhotoInfo": "\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438", "TabShows": "\u0426\u0438\u043a\u043b\u044b", + "HeaderInstall": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430", "TabEpisodes": "\u042d\u043f\u0438\u0437\u043e\u0434\u044b", + "LabelSelectVersionToInstall": "\u0412\u044b\u0431\u043e\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438:", "TabGenres": "\u0416\u0430\u043d\u0440\u044b", + "LinkSupporterMembership": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u043e\u043c \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u043e\u0432", "TabPeople": "\u041b\u044e\u0434\u0438", + "MessageSupporterPluginRequiresMembership": "\u0414\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 14 \u0434\u043d\u0435\u0439 \u043f\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430.", "TabNetworks": "\u0422\u0435\u043b\u0435\u0441\u0435\u0442\u0438", + "MessagePremiumPluginRequiresMembership": "\u0414\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u0430 \u0434\u043b\u044f \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 14 \u0434\u043d\u0435\u0439 \u043f\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430.", "HeaderUsers": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438", + "HeaderReviews": "\u041e\u0442\u0437\u044b\u0432\u044b", "HeaderFilters": "\u0424\u0438\u043b\u044c\u0442\u0440\u044b:", + "HeaderDeveloperInfo": "\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435", "ButtonFilter": "\u0424\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c", + "HeaderRevisionHistory": "\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439", "OptionFavorite": "\u0418\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435", + "ButtonViewWebsite": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0435\u0431\u0441\u0430\u0439\u0442", "OptionLikes": "\u041d\u0440\u0430\u0432\u0438\u0442\u0441\u044f", + "LabelRecurringDonationCanBeCancelledHelp": "\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u043f\u043e\u0436\u0435\u0440\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u0430\u0448\u0443 \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c PayPal.", "OptionDislikes": "\u041d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f", "OptionActors": "\u0410\u043a\u0442\u0451\u0440\u044b", "OptionGuestStars": "\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0451\u043d\u043d\u044b\u0435 \u0430\u043a\u0442\u0451\u0440\u044b", @@ -226,7 +236,7 @@ "OptionDescending": "\u0423\u0431\u044b\u0432\u0430\u043d\u0438\u0435", "OptionRuntime": "\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c", "OptionReleaseDate": "\u0414\u0430\u0442\u0430 \u0432\u044b\u043f\u0443\u0441\u043a\u0430", - "OptionPlayCount": "\u0427\u0438\u0441\u043b\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439", + "OptionPlayCount": "\u041f\u043e\u0434\u0441\u0447\u0451\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439", "OptionDatePlayed": "\u0414\u0430\u0442\u0430 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f", "OptionDateAdded": "\u0414\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f", "OptionAlbumArtist": "\u0410\u043b\u044c\u0431\u043e\u043c. \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c", @@ -353,13 +363,13 @@ "LabelRunServerAtStartupHelp": "\u0417\u043d\u0430\u0447\u043e\u043a \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u043b\u043e\u0442\u043a\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0440\u0442\u0430 Windows. \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043b\u0443\u0436\u0431\u0443 Windows, \u0443\u0431\u0435\u0440\u0438\u0442\u0435 \u0433\u0430\u043b\u043e\u0447\u043a\u0443 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u043b\u0443\u0436\u0431\u0443 \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f Windows. \u041f\u0440\u0438\u043c\u0438\u0442\u0435 \u043a \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044e, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0431\u0430 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u043e\u043a \u0432 \u043b\u043e\u0442\u043a\u0435 \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u043b\u0443\u0436\u0431\u044b.", "ButtonSelectDirectory": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433", "LabelCustomPaths": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u043f\u043e \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c. \u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u043f\u043e\u043b\u044f \u043f\u0443\u0441\u0442\u044b\u043c\u0438 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445.", - "LabelCachePath": "\u041f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 Cache:", + "LabelCachePath": "\u041f\u0443\u0442\u044c \u043a\u043e \u043a\u0435\u0448\u0443:", "LabelCachePathHelp": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u044d\u0448\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432.", - "LabelImagesByNamePath": "\u041f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 Images by name:", + "LabelImagesByNamePath": "\u041f\u0443\u0442\u044c \u043a\u043e \u0440\u0438\u0441\u0443\u043d\u043a\u0430\u043c \u0447\u0435\u0440\u0435\u0437 \u0438\u043c\u044f:", "LabelImagesByNamePathHelp": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0445 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0430\u043a\u0442\u0451\u0440\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0435\u0439, \u0436\u0430\u043d\u0440\u043e\u0432 \u0438 \u0441\u0442\u0443\u0434\u0438\u0439.", - "LabelMetadataPath": "\u041f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 Metadata:", + "LabelMetadataPath": "\u041f\u0443\u0442\u044c \u043a\u043e \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c:", "LabelMetadataPathHelp": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0445 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0439 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0434\u0438\u0430\u043f\u0430\u043f\u043e\u043a.", - "LabelTranscodingTempPath": "\u041f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 Transcoding temporary:", + "LabelTranscodingTempPath": "\u041f\u0443\u0442\u044c \u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u0430\u043c \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438:", "LabelTranscodingTempPathHelp": "\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0444\u0430\u0439\u043b\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435. \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c, \u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0441\u0442\u044b\u043c, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.", "TabBasics": "\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435", "TabTV": "\u0422\u0412", @@ -965,11 +975,11 @@ "OptionList": "\u0421\u043f\u0438\u0441\u043e\u043a", "TabDashboard": "\u0418\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u044c", "TitleServer": "\u0421\u0435\u0440\u0432\u0435\u0440", - "LabelCache": "Cache:", - "LabelLogs": "Logs:", - "LabelMetadata": "Metadata:", - "LabelImagesByName": "Images by name:", - "LabelTranscodingTemporaryFiles": "Transcoding temporary files:", + "LabelCache": "\u041a\u0435\u0448:", + "LabelLogs": "\u0416\u0443\u0440\u043d\u0430\u043b\u044b:", + "LabelMetadata": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435:", + "LabelImagesByName": "\u0420\u0438\u0441\u0443\u043d\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u043c\u044f:", + "LabelTranscodingTemporaryFiles": "\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438:", "HeaderLatestMusic": "\u041d\u043e\u0432\u0438\u043d\u043a\u0438 \u043c\u0443\u0437\u044b\u043a\u0438", "HeaderBranding": "\u0411\u0440\u0435\u043d\u0434\u0438\u043d\u0433", "HeaderApiKeys": "\u041a\u043b\u044e\u0447\u0438 API", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/server.json b/MediaBrowser.Server.Implementations/Localization/Server/server.json index 21eb0c1c9f..2ed67ccf0d 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/server.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/server.json @@ -1110,5 +1110,15 @@ "LabelAirDays": "Air days:", "LabelAirTime": "Air time:", "HeaderMediaInfo": "Media Info", - "HeaderPhotoInfo": "Photo Info" + "HeaderPhotoInfo": "Photo Info", + "HeaderInstall": "Install", + "LabelSelectVersionToInstall": "Select version to install:", + "LinkSupporterMembership": "Learn about the Supporter Membership", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", + "HeaderReviews": "Reviews", + "HeaderDeveloperInfo": "Developer Info", + "HeaderRevisionHistory": "Revision History", + "ButtonViewWebsite": "View website", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account." } diff --git a/MediaBrowser.Server.Implementations/Localization/Server/sv.json b/MediaBrowser.Server.Implementations/Localization/Server/sv.json index 445071cdd9..ced6fe1f80 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/sv.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/sv.json @@ -192,15 +192,25 @@ "TabUpcoming": "Kommande", "HeaderPhotoInfo": "Photo Info", "TabShows": "Serier", + "HeaderInstall": "Install", "TabEpisodes": "Avsnitt", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "Genrer", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "Personer", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "TV-bolag", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Anv\u00e4ndare", + "HeaderReviews": "Reviews", "HeaderFilters": "Filter:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filtrera", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favoriter", + "ButtonViewWebsite": "View website", "OptionLikes": "Gillar", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Ogillar", "OptionActors": "Sk\u00e5despelare", "OptionGuestStars": "G\u00e4startister", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/tr.json b/MediaBrowser.Server.Implementations/Localization/Server/tr.json index ea2a7e95d6..d991debe6a 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/tr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/tr.json @@ -192,15 +192,25 @@ "TabUpcoming": "Gelecek", "HeaderPhotoInfo": "Photo Info", "TabShows": "G\u00f6steriler", + "HeaderInstall": "Install", "TabEpisodes": "B\u00f6l\u00fcmler", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "T\u00fcrler", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "Oyuncular", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "A\u011flar", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "Kullan\u0131c\u0131lar", + "HeaderReviews": "Reviews", "HeaderFilters": "Filtrelemeler", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filtre", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Favoriler", + "ButtonViewWebsite": "View website", "OptionLikes": "Be\u011feniler", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Be\u011fenmeyenler", "OptionActors": "Akt\u00f6rler", "OptionGuestStars": "Konuk oylar\u0131", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/vi.json b/MediaBrowser.Server.Implementations/Localization/Server/vi.json index 3590a5feae..01f7f85c95 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/vi.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/vi.json @@ -192,15 +192,25 @@ "TabUpcoming": "S\u1eafp di\u1ec5n ra", "HeaderPhotoInfo": "Photo Info", "TabShows": "Shows", + "HeaderInstall": "Install", "TabEpisodes": "C\u00e1c t\u1eadp phim", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "C\u00e1c th\u1ec3 lo\u1ea1i", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "M\u1ecdi ng\u01b0\u1eddi", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "C\u00e1c m\u1ea1ng", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "d\u00f9ng", + "HeaderReviews": "Reviews", "HeaderFilters": "Filters:", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "Filter", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "Y\u00eau th\u00edch", + "ButtonViewWebsite": "View website", "OptionLikes": "Th\u00edch", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "Kh\u00f4ng th\u00edch", "OptionActors": "Di\u1ec5n vi\u00ean", "OptionGuestStars": "Guest Stars", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json b/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json index 50a794ec86..0c3ba3c4aa 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json @@ -192,15 +192,25 @@ "TabUpcoming": "\u5373\u5c07\u767c\u5e03", "HeaderPhotoInfo": "Photo Info", "TabShows": "\u7bc0\u76ee", + "HeaderInstall": "Install", "TabEpisodes": "\u55ae\u5143", + "LabelSelectVersionToInstall": "Select version to install:", "TabGenres": "\u985e\u578b", + "LinkSupporterMembership": "Learn about the Supporter Membership", "TabPeople": "\u4eba\u7269", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", "TabNetworks": "\u7db2\u7d61", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", "HeaderUsers": "\u7528\u6236", + "HeaderReviews": "Reviews", "HeaderFilters": "\u904e\u6ffe\uff1a", + "HeaderDeveloperInfo": "Developer Info", "ButtonFilter": "\u904e\u6ffe", + "HeaderRevisionHistory": "Revision History", "OptionFavorite": "\u6211\u7684\u6700\u611b", + "ButtonViewWebsite": "View website", "OptionLikes": "\u559c\u6b61", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", "OptionDislikes": "\u4e0d\u559c\u6b61", "OptionActors": "\u6f14\u54e1", "OptionGuestStars": "\u7279\u9080\u660e\u661f", diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 1b5bd84409..51dccddff1 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -305,20 +305,6 @@ namespace MediaBrowser.ServerApplication { var saveConfig = false; - if (ServerConfigurationManager.Configuration.DlnaOptions != null) - { - ServerConfigurationManager.SaveConfiguration("dlna", ServerConfigurationManager.Configuration.DlnaOptions); - ServerConfigurationManager.Configuration.DlnaOptions = null; - saveConfig = true; - } - - if (ServerConfigurationManager.Configuration.LiveTvOptions != null) - { - ServerConfigurationManager.SaveConfiguration("livetv", ServerConfigurationManager.Configuration.LiveTvOptions); - ServerConfigurationManager.Configuration.LiveTvOptions = null; - saveConfig = true; - } - if (ServerConfigurationManager.Configuration.TvFileOrganizationOptions != null) { ServerConfigurationManager.SaveConfiguration("autoorganize", new AutoOrganizeOptions { TvOptions = ServerConfigurationManager.Configuration.TvFileOrganizationOptions });