Pārlūkot izejas kodu

localize plugin installation process

Luke Pulverenti 10 gadi atpakaļ
vecāks
revīzija
45db7d21b2
69 mainītis faili ar 886 papildinājumiem un 295 dzēšanām
  1. 8 0
      MediaBrowser.Api/Playback/Hls/VideoHlsService.cs
  2. 20 1
      MediaBrowser.Api/System/SystemService.cs
  3. 1 0
      MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj
  4. 45 16
      MediaBrowser.Common.Implementations/Security/MBLicenseFile.cs
  5. 63 11
      MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs
  6. 14 0
      MediaBrowser.Common.Implementations/Security/SuppporterInfoResponse.cs
  7. 6 0
      MediaBrowser.Common/Security/ISecurityManager.cs
  8. 7 1
      MediaBrowser.Controller/Net/AuthenticatedAttribute.cs
  9. 1 1
      MediaBrowser.Controller/Net/IAuthService.cs
  10. 14 18
      MediaBrowser.Model/Entities/MBRegistrationRecord.cs
  11. 15 1
      MediaBrowser.Server.Implementations/EntryPoints/LoadRegistrations.cs
  12. 11 3
      MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
  13. 0 2
      MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs
  14. 7 16
      MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs
  15. 8 34
      MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs
  16. 4 9
      MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs
  17. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json
  18. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json
  19. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json
  20. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/da.json
  21. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/de.json
  22. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/el.json
  23. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json
  24. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json
  25. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/es.json
  26. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json
  27. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json
  28. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/he.json
  29. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/it.json
  30. 63 54
      MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
  31. 19 10
      MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json
  32. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json
  33. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json
  34. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json
  35. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json
  36. 12 3
      MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json
  37. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json
  38. 12 3
      MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json
  39. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json
  40. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json
  41. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json
  42. 10 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json
  43. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/ar.json
  44. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/ca.json
  45. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/da.json
  46. 15 5
      MediaBrowser.Server.Implementations/Localization/Server/de.json
  47. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/el.json
  48. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/en_GB.json
  49. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/en_US.json
  50. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/es.json
  51. 17 7
      MediaBrowser.Server.Implementations/Localization/Server/es_MX.json
  52. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/fr.json
  53. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/he.json
  54. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/it.json
  55. 30 20
      MediaBrowser.Server.Implementations/Localization/Server/kk.json
  56. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/ko.json
  57. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/ms.json
  58. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/nb.json
  59. 26 16
      MediaBrowser.Server.Implementations/Localization/Server/nl.json
  60. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/pl.json
  61. 19 9
      MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json
  62. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json
  63. 28 18
      MediaBrowser.Server.Implementations/Localization/Server/ru.json
  64. 11 1
      MediaBrowser.Server.Implementations/Localization/Server/server.json
  65. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/sv.json
  66. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/tr.json
  67. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/vi.json
  68. 10 0
      MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json
  69. 0 14
      MediaBrowser.ServerApplication/ApplicationHost.cs

+ 8 - 0
MediaBrowser.Api/Playback/Hls/VideoHlsService.cs

@@ -62,6 +62,14 @@ namespace MediaBrowser.Api.Playback.Hls
         {
         {
         }
         }
 
 
+        protected override bool SupportsThrottling
+        {
+            get
+            {
+                return false;
+            }
+        }
+
         /// <summary>
         /// <summary>
         /// Gets the specified request.
         /// Gets the specified request.
         /// </summary>
         /// </summary>

+ 20 - 1
MediaBrowser.Api/System/SystemService.cs

@@ -1,8 +1,10 @@
 using MediaBrowser.Common.Configuration;
 using MediaBrowser.Common.Configuration;
 using MediaBrowser.Common.IO;
 using MediaBrowser.Common.IO;
 using MediaBrowser.Common.Net;
 using MediaBrowser.Common.Net;
+using MediaBrowser.Common.Security;
 using MediaBrowser.Controller;
 using MediaBrowser.Controller;
 using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Net;
+using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.System;
 using MediaBrowser.Model.System;
 using ServiceStack;
 using ServiceStack;
 using System;
 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.
     /// This is currently not authenticated because the uninstaller needs to be able to shutdown the server.
     /// </summary>
     /// </summary>
     [Route("/System/Shutdown", "POST", Summary = "Shuts down the application")]
     [Route("/System/Shutdown", "POST", Summary = "Shuts down the application")]
+    [Authenticated(AllowLocal = true)]
     public class ShutdownApplication
     public class ShutdownApplication
     {
     {
     }
     }
@@ -66,6 +69,12 @@ namespace MediaBrowser.Api.System
         public string Name { get; set; }
         public string Name { get; set; }
     }
     }
 
 
+    [Route("/System/SupporterInfo", "GET")]
+    [Authenticated]
+    public class GetSupporterInfo : IReturn<SupporterInfo>
+    {
+    }
+
     /// <summary>
     /// <summary>
     /// Class SystemInfoService
     /// Class SystemInfoService
     /// </summary>
     /// </summary>
@@ -80,6 +89,8 @@ namespace MediaBrowser.Api.System
 
 
         private readonly INetworkManager _network;
         private readonly INetworkManager _network;
 
 
+        private readonly ISecurityManager _security;
+
         /// <summary>
         /// <summary>
         /// Initializes a new instance of the <see cref="SystemService" /> class.
         /// Initializes a new instance of the <see cref="SystemService" /> class.
         /// </summary>
         /// </summary>
@@ -87,12 +98,20 @@ namespace MediaBrowser.Api.System
         /// <param name="appPaths">The application paths.</param>
         /// <param name="appPaths">The application paths.</param>
         /// <param name="fileSystem">The file system.</param>
         /// <param name="fileSystem">The file system.</param>
         /// <exception cref="ArgumentNullException">jsonSerializer</exception>
         /// <exception cref="ArgumentNullException">jsonSerializer</exception>
-        public SystemService(IServerApplicationHost appHost, IApplicationPaths appPaths, IFileSystem fileSystem, INetworkManager network)
+        public SystemService(IServerApplicationHost appHost, IApplicationPaths appPaths, IFileSystem fileSystem, INetworkManager network, ISecurityManager security)
         {
         {
             _appHost = appHost;
             _appHost = appHost;
             _appPaths = appPaths;
             _appPaths = appPaths;
             _fileSystem = fileSystem;
             _fileSystem = fileSystem;
             _network = network;
             _network = network;
+            _security = security;
+        }
+
+        public async Task<object> Get(GetSupporterInfo request)
+        {
+            var result = await _security.GetSupporterInfo().ConfigureAwait(false);
+
+            return ToOptimizedResult(result);
         }
         }
 
 
         public object Get(GetServerLogs request)
         public object Get(GetServerLogs request)

+ 1 - 0
MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj

@@ -101,6 +101,7 @@
     <Compile Include="Security\MBLicenseFile.cs" />
     <Compile Include="Security\MBLicenseFile.cs" />
     <Compile Include="Security\PluginSecurityManager.cs" />
     <Compile Include="Security\PluginSecurityManager.cs" />
     <Compile Include="Security\RegRecord.cs" />
     <Compile Include="Security\RegRecord.cs" />
+    <Compile Include="Security\SuppporterInfoResponse.cs" />
     <Compile Include="Serialization\JsonSerializer.cs" />
     <Compile Include="Serialization\JsonSerializer.cs" />
     <Compile Include="Serialization\XmlSerializer.cs" />
     <Compile Include="Serialization\XmlSerializer.cs" />
     <Compile Include="Updates\InstallationManager.cs" />
     <Compile Include="Updates\InstallationManager.cs" />

+ 45 - 16
MediaBrowser.Common.Implementations/Security/MBLicenseFile.cs

@@ -1,7 +1,10 @@
 using MediaBrowser.Common.Configuration;
 using MediaBrowser.Common.Configuration;
 using System;
 using System;
+using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Collections.Generic;
+using System.Globalization;
 using System.IO;
 using System.IO;
+using System.Linq;
 using System.Security.Cryptography;
 using System.Security.Cryptography;
 using System.Text;
 using System.Text;
 
 
@@ -19,7 +22,7 @@ namespace MediaBrowser.Common.Implementations.Security
                 if (value != _regKey)
                 if (value != _regKey)
                 {
                 {
                     //if key is changed - clear out our saved validations
                     //if key is changed - clear out our saved validations
-                    UpdateRecords.Clear();
+                    _updateRecords.Clear();
                     _regKey = value;
                     _regKey = value;
                 }
                 }
             }
             }
@@ -33,24 +36,30 @@ namespace MediaBrowser.Common.Implementations.Security
             }
             }
         }
         }
 
 
-        public string LegacyKey { get; set; }
-        private Dictionary<Guid, DateTime> UpdateRecords { get; set; }
-        private readonly object _lck = new object();
+        private readonly ConcurrentDictionary<Guid, DateTime> _updateRecords = new ConcurrentDictionary<Guid, DateTime>();
+        private readonly object _fileLock = new object();
         private string _regKey;
         private string _regKey;
 
 
         public MBLicenseFile(IApplicationPaths appPaths)
         public MBLicenseFile(IApplicationPaths appPaths)
         {
         {
             _appPaths = appPaths;
             _appPaths = appPaths;
 
 
-            UpdateRecords = new Dictionary<Guid, DateTime>();
             Load();
             Load();
         }
         }
 
 
+        private void SetUpdateRecord(Guid key, DateTime value)
+        {
+            _updateRecords.AddOrUpdate(key, value, (k, v) => value);
+        }
+
         public void AddRegCheck(string featureId)
         public void AddRegCheck(string featureId)
         {
         {
             using (var provider = new MD5CryptoServiceProvider())
             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();
                 Save();
             }
             }
 
 
@@ -60,7 +69,11 @@ namespace MediaBrowser.Common.Implementations.Security
         {
         {
             using (var provider = new MD5CryptoServiceProvider())
             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();
                 Save();
             }
             }
 
 
@@ -71,8 +84,10 @@ namespace MediaBrowser.Common.Implementations.Security
             using (var provider = new MD5CryptoServiceProvider())
             using (var provider = new MD5CryptoServiceProvider())
             {
             {
                 DateTime last;
                 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;
             string[] contents = null;
             var licenseFile = Filename;
             var licenseFile = Filename;
-            lock (_lck)
+            lock (_fileLock)
             {
             {
                 try
                 try
                 {
                 {
@@ -95,13 +110,19 @@ namespace MediaBrowser.Common.Implementations.Security
             {
             {
                 //first line is reg key
                 //first line is reg key
                 RegKey = contents[0];
                 RegKey = contents[0];
+
                 //next is legacy key
                 //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
                 //the rest of the lines should be pairs of features and timestamps
                 for (var i = 2; i < contents.Length; i = i + 2)
                 for (var i = 2; i < contents.Length; i = i + 2)
                 {
                 {
                     var feat = Guid.Parse(contents[i]);
                     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()
         public void Save()
         {
         {
             //build our array
             //build our array
-            var lines = new List<string> {RegKey, LegacyKey};
-            foreach (var pair in UpdateRecords)
+            var lines = new List<string>
+            {
+                RegKey, 
+
+                // Legacy key
+                string.Empty
+            };
+
+            foreach (var pair in _updateRecords
+                .ToList())
             {
             {
                 lines.Add(pair.Key.ToString());
                 lines.Add(pair.Key.ToString());
-                lines.Add(pair.Value.Ticks.ToString());
+                lines.Add(pair.Value.Ticks.ToString(CultureInfo.InvariantCulture));
             }
             }
 
 
             var licenseFile = Filename;
             var licenseFile = Filename;
             Directory.CreateDirectory(Path.GetDirectoryName(licenseFile));
             Directory.CreateDirectory(Path.GetDirectoryName(licenseFile));
-            lock (_lck) File.WriteAllLines(licenseFile, lines);
+            lock (_fileLock) File.WriteAllLines(licenseFile, lines);
         }
         }
     }
     }
 }
 }

+ 63 - 11
MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs

@@ -18,7 +18,7 @@ namespace MediaBrowser.Common.Implementations.Security
     public class PluginSecurityManager : ISecurityManager
     public class PluginSecurityManager : ISecurityManager
     {
     {
         private const string MBValidateUrl = Constants.Constants.MbAdminUrl + "service/registration/validate";
         private const string MBValidateUrl = Constants.Constants.MbAdminUrl + "service/registration/validate";
-        
+
         /// <summary>
         /// <summary>
         /// The _is MB supporter
         /// The _is MB supporter
         /// </summary>
         /// </summary>
@@ -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)); }
             get { return _licenseFile ?? (_licenseFile = new MBLicenseFile(_appPaths)); }
         }
         }
-        
+
         private readonly IHttpClient _httpClient;
         private readonly IHttpClient _httpClient;
         private readonly IJsonSerializer _jsonSerializer;
         private readonly IJsonSerializer _jsonSerializer;
         private readonly IApplicationHost _appHost;
         private readonly IApplicationHost _appHost;
@@ -123,7 +123,7 @@ namespace MediaBrowser.Common.Implementations.Security
             return GetRegistrationStatusInternal(feature, mb2Equivalent, version);
             return GetRegistrationStatusInternal(feature, mb2Equivalent, version);
         }
         }
 
 
-        public Task<MBRegistrationRecord> GetSupporterRegistrationStatus()
+        private Task<MBRegistrationRecord> GetSupporterRegistrationStatus()
         {
         {
             return GetRegistrationStatusInternal("MBSupporter", null, _appHost.ApplicationVersion.ToString());
             return GetRegistrationStatusInternal("MBSupporter", null, _appHost.ApplicationVersion.ToString());
         }
         }
@@ -142,15 +142,49 @@ namespace MediaBrowser.Common.Implementations.Security
             {
             {
                 if (value != LicenseFile.RegKey)
                 if (value != LicenseFile.RegKey)
                 {
                 {
-                    LicenseFile.RegKey = value; 
-                    LicenseFile.Save();                    
-                    
+                    LicenseFile.RegKey = value;
+                    LicenseFile.Save();
+
                     // re-load registration info
                     // re-load registration info
                     Task.Run(() => LoadAllRegistrationInfo());
                     Task.Run(() => LoadAllRegistrationInfo());
                 }
                 }
             }
             }
         }
         }
 
 
+        public async Task<SupporterInfo> 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<SuppporterInfoResponse>(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<MBRegistrationRecord> GetRegistrationStatusInternal(string feature,
         private async Task<MBRegistrationRecord> GetRegistrationStatusInternal(string feature,
             string mb2Equivalent = null,
             string mb2Equivalent = null,
             string version = 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
             //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
             var reg = new RegRecord
             {
             {
-                registered = LicenseFile.LastChecked(feature) > DateTime.UtcNow.AddDays(-15)
+                registered = LicenseFile.LastChecked(feature) > DateTime.UtcNow.AddDays(-7)
             };
             };
 
 
             var success = reg.registered;
             var success = reg.registered;
@@ -201,15 +235,33 @@ namespace MediaBrowser.Common.Implementations.Security
                 }
                 }
             }
             }
 
 
-            return new MBRegistrationRecord
+            var record = new MBRegistrationRecord
             {
             {
                 IsRegistered = reg.registered,
                 IsRegistered = reg.registered,
                 ExpirationDate = reg.expDate,
                 ExpirationDate = reg.expDate,
                 RegChecked = true,
                 RegChecked = true,
                 RegError = !success
                 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);
+        }
+
         /// <summary>
         /// <summary>
         /// Resets the supporter info.
         /// Resets the supporter info.
         /// </summary>
         /// </summary>

+ 14 - 0
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; }
+    }
+}

+ 6 - 0
MediaBrowser.Common/Security/ISecurityManager.cs

@@ -39,5 +39,11 @@ namespace MediaBrowser.Common.Security
         /// </summary>
         /// </summary>
         /// <returns></returns>
         /// <returns></returns>
         Task LoadAllRegistrationInfo();
         Task LoadAllRegistrationInfo();
+
+        /// <summary>
+        /// Gets the supporter information.
+        /// </summary>
+        /// <returns>Task&lt;SupporterInfo&gt;.</returns>
+        Task<SupporterInfo> GetSupporterInfo();
     }
     }
 }
 }

+ 7 - 1
MediaBrowser.Controller/Net/AuthenticatedAttribute.cs

@@ -7,6 +7,12 @@ namespace MediaBrowser.Controller.Net
     {
     {
         public IAuthService AuthService { get; set; }
         public IAuthService AuthService { get; set; }
 
 
+        /// <summary>
+        /// Gets or sets a value indicating whether or not to allow local unauthenticated access.
+        /// </summary>
+        /// <value><c>true</c> if [allow local]; otherwise, <c>false</c>.</value>
+        public bool AllowLocal { get; set; }
+
         /// <summary>
         /// <summary>
         /// The request filter is executed before the service.
         /// The request filter is executed before the service.
         /// </summary>
         /// </summary>
@@ -15,7 +21,7 @@ namespace MediaBrowser.Controller.Net
         /// <param name="requestDto">The request DTO</param>
         /// <param name="requestDto">The request DTO</param>
         public void RequestFilter(IRequest request, IResponse response, object requestDto)
         public void RequestFilter(IRequest request, IResponse response, object requestDto)
         {
         {
-            AuthService.Authenticate(request, response, requestDto);
+            AuthService.Authenticate(request, response, requestDto, AllowLocal);
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 1 - 1
MediaBrowser.Controller/Net/IAuthService.cs

@@ -4,6 +4,6 @@ namespace MediaBrowser.Controller.Net
 {
 {
     public interface IAuthService
     public interface IAuthService
     {
     {
-        void Authenticate(IRequest request, IResponse response, object requestDto);
+        void Authenticate(IRequest request, IResponse response, object requestDto, bool allowLocal);
     }
     }
 }
 }

+ 14 - 18
MediaBrowser.Model/Entities/MBRegistrationRecord.cs

@@ -5,25 +5,21 @@ namespace MediaBrowser.Model.Entities
     public class MBRegistrationRecord
     public class MBRegistrationRecord
     {
     {
         public DateTime ExpirationDate { get; set; }
         public DateTime ExpirationDate { get; set; }
-        public bool IsRegistered { get; set;}
+        public bool IsRegistered { get; set; }
         public bool RegChecked { get; set; }
         public bool RegChecked { get; set; }
         public bool RegError { 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; }
     }
     }
 }
 }

+ 15 - 1
MediaBrowser.Server.Implementations/EntryPoints/LoadRegistrations.cs

@@ -2,6 +2,8 @@
 using MediaBrowser.Controller.Plugins;
 using MediaBrowser.Controller.Plugins;
 using MediaBrowser.Model.Logging;
 using MediaBrowser.Model.Logging;
 using System;
 using System;
+using System.Threading;
+using System.Threading.Tasks;
 
 
 namespace MediaBrowser.Server.Implementations.EntryPoints
 namespace MediaBrowser.Server.Implementations.EntryPoints
 {
 {
@@ -20,6 +22,8 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
         /// </summary>
         /// </summary>
         private readonly ILogger _logger;
         private readonly ILogger _logger;
 
 
+        private Timer _timer;
+
         /// <summary>
         /// <summary>
         /// Initializes a new instance of the <see cref="LoadRegistrations" /> class.
         /// Initializes a new instance of the <see cref="LoadRegistrations" /> class.
         /// </summary>
         /// </summary>
@@ -35,7 +39,12 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
         /// <summary>
         /// <summary>
         /// Runs this instance.
         /// Runs this instance.
         /// </summary>
         /// </summary>
-        public async void Run()
+        public void Run()
+        {
+            _timer = new Timer(s => LoadAllRegistrations(), null, TimeSpan.FromMilliseconds(100), TimeSpan.FromHours(24));
+        }
+
+        private async Task LoadAllRegistrations()
         {
         {
             try
             try
             {
             {
@@ -52,6 +61,11 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
         /// </summary>
         /// </summary>
         public void Dispose()
         public void Dispose()
         {
         {
+            if (_timer != null)
+            {
+                _timer.Dispose();
+                _timer = null;
+            }
         }
         }
     }
     }
 }
 }

+ 11 - 3
MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs

@@ -14,6 +14,7 @@ using ServiceStack.Host.HttpListener;
 using ServiceStack.Logging;
 using ServiceStack.Logging;
 using ServiceStack.Web;
 using ServiceStack.Web;
 using System;
 using System;
+using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.IO;
 using System.IO;
 using System.Linq;
 using System.Linq;
@@ -39,13 +40,15 @@ namespace MediaBrowser.Server.Implementations.HttpServer
 
 
         public event EventHandler<WebSocketConnectEventArgs> WebSocketConnected;
         public event EventHandler<WebSocketConnectEventArgs> WebSocketConnected;
 
 
+        private readonly ConcurrentDictionary<string, string> _localEndPoints = new ConcurrentDictionary<string, string>(StringComparer.OrdinalIgnoreCase);
+        
         /// <summary>
         /// <summary>
         /// Gets the local end points.
         /// Gets the local end points.
         /// </summary>
         /// </summary>
         /// <value>The local end points.</value>
         /// <value>The local end points.</value>
         public IEnumerable<string> LocalEndPoints
         public IEnumerable<string> LocalEndPoints
         {
         {
-            get { return _listener == null ? new List<string>() : _listener.LocalEndPoints; }
+            get { return _listener == null ? new List<string>() : _localEndPoints.Keys.ToList(); }
         }
         }
 
 
         public HttpListenerHost(IApplicationHost applicationHost, ILogManager logManager, string serviceName, string handlerPath, string defaultRedirectPath, params Assembly[] assembliesWithServices)
         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;
             return this;
         }
         }
 
 
+        private void OnRequestReceived(string localEndPoint)
+        {
+            _localEndPoints.GetOrAdd(localEndPoint, localEndPoint);
+        }
+
         /// <summary>
         /// <summary>
         /// Starts the Web Service
         /// Starts the Web Service
         /// </summary>
         /// </summary>
@@ -159,9 +167,9 @@ namespace MediaBrowser.Server.Implementations.HttpServer
             HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(UrlPrefixes.First());
             HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(UrlPrefixes.First());
 
 
             _listener = NativeWebSocket.IsSupported
             _listener = NativeWebSocket.IsSupported
-                ? _listener = new HttpListenerServer(_logger)
+                ? _listener = new HttpListenerServer(_logger, OnRequestReceived)
                 //? _listener = new WebSocketSharpListener(_logger)
                 //? _listener = new WebSocketSharpListener(_logger)
-                : _listener = new WebSocketSharpListener(_logger);
+                : _listener = new WebSocketSharpListener(_logger, OnRequestReceived);
 
 
             _listener.WebSocketHandler = WebSocketHandler;
             _listener.WebSocketHandler = WebSocketHandler;
             _listener.ErrorHandler = ErrorHandler;
             _listener.ErrorHandler = ErrorHandler;

+ 0 - 2
MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs

@@ -8,8 +8,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer
 {
 {
     public interface IHttpListener : IDisposable
     public interface IHttpListener : IDisposable
     {
     {
-        IEnumerable<string> LocalEndPoints { get; }
-
         /// <summary>
         /// <summary>
         /// Gets or sets the error handler.
         /// Gets or sets the error handler.
         /// </summary>
         /// </summary>

+ 7 - 16
MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs

@@ -4,7 +4,6 @@ using ServiceStack;
 using ServiceStack.Host.HttpListener;
 using ServiceStack.Host.HttpListener;
 using ServiceStack.Web;
 using ServiceStack.Web;
 using System;
 using System;
-using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
 using System.Net;
 using System.Net;
@@ -20,26 +19,18 @@ namespace MediaBrowser.Server.Implementations.HttpServer.NetListener
         private HttpListener _listener;
         private HttpListener _listener;
         private readonly AutoResetEvent _listenForNextRequest = new AutoResetEvent(false);
         private readonly AutoResetEvent _listenForNextRequest = new AutoResetEvent(false);
 
 
-        public System.Action<Exception, IRequest> ErrorHandler { get; set; }
+        public Action<Exception, IRequest> ErrorHandler { get; set; }
         public Action<WebSocketConnectEventArgs> WebSocketHandler { get; set; }
         public Action<WebSocketConnectEventArgs> WebSocketHandler { get; set; }
-        public System.Func<IHttpRequest, Uri, Task> RequestHandler { get; set; }
+        public Func<IHttpRequest, Uri, Task> RequestHandler { get; set; }
 
 
-        private readonly ConcurrentDictionary<string, string> _localEndPoints = new ConcurrentDictionary<string, string>(StringComparer.OrdinalIgnoreCase);
+        private readonly Action<string> _endpointListener;
         
         
-        public HttpListenerServer(ILogger logger)
+        public HttpListenerServer(ILogger logger, Action<string> endpointListener)
         {
         {
             _logger = logger;
             _logger = logger;
+            _endpointListener = endpointListener;
         }
         }
 
 
-        /// <summary>
-        /// Gets the local end points.
-        /// </summary>
-        /// <value>The local end points.</value>
-        public IEnumerable<string> LocalEndPoints
-        {
-            get { return _localEndPoints.Keys.ToList(); }
-        }
-        
         private List<string> UrlPrefixes { get; set; }
         private List<string> UrlPrefixes { get; set; }
 
 
         public void Start(IEnumerable<string> urlPrefixes)
         public void Start(IEnumerable<string> urlPrefixes)
@@ -47,7 +38,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.NetListener
             UrlPrefixes = urlPrefixes.ToList();
             UrlPrefixes = urlPrefixes.ToList();
 
 
             if (_listener == null)
             if (_listener == null)
-                _listener = new System.Net.HttpListener();
+                _listener = new HttpListener();
 
 
             //HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(UrlPrefixes.First());
             //HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(UrlPrefixes.First());
 
 
@@ -229,7 +220,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.NetListener
             {
             {
                 var address = endpoint.ToString();
                 var address = endpoint.ToString();
 
 
-                _localEndPoints.GetOrAdd(address, address);
+                _endpointListener(address);
             }
             }
 
 
             LogRequest(_logger, request);
             LogRequest(_logger, request);

+ 8 - 34
MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs

@@ -42,7 +42,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
         /// </summary>
         /// </summary>
         public string HtmlRedirect { get; set; }
         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))
             if (HostContext.HasValidAuthSecret(req))
                 return;
                 return;
@@ -50,13 +50,13 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
             //ExecuteBasic(req, res, requestDto); //first check if session is authenticated
             //ExecuteBasic(req, res, requestDto); //first check if session is authenticated
             //if (res.IsClosed) return; //AuthenticateAttribute already closed the request (ie auth failed)
             //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
         // TODO: Remove this when all clients have supported the new sescurity
-        private readonly List<string> _updatedClients = new List<string>(){"Dashboard"}; 
+        private readonly List<string> _updatedClients = new List<string>() { "Dashboard", "Chromecast" };
 
 
-        private void ValidateUser(IRequest req)
+        private void ValidateUser(IRequest req, bool allowLocal)
         {
         {
             //This code is executed before the service
             //This code is executed before the service
             var auth = AuthorizationContext.GetAuthorizationInfo(req);
             var auth = AuthorizationContext.GetAuthorizationInfo(req);
@@ -65,7 +65,10 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
                 || _config.Configuration.EnableTokenAuthentication
                 || _config.Configuration.EnableTokenAuthentication
                 || _updatedClients.Contains(auth.Client ?? string.Empty, StringComparer.OrdinalIgnoreCase))
                 || _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)
             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<IAuthWithRequest>()
-                .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)
         protected bool DoHtmlRedirectIfConfigured(IRequest req, IResponse res, bool includeRedirectParam = false)
         {
         {
             var htmlRedirect = this.HtmlRedirect ?? AuthenticateService.HtmlRedirect;
             var htmlRedirect = this.HtmlRedirect ?? AuthenticateService.HtmlRedirect;

+ 4 - 9
MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs

@@ -3,7 +3,6 @@ using MediaBrowser.Model.Logging;
 using ServiceStack;
 using ServiceStack;
 using ServiceStack.Web;
 using ServiceStack.Web;
 using System;
 using System;
-using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
 using System.Text;
 using System.Text;
@@ -15,20 +14,16 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
 {
 {
     public class WebSocketSharpListener : IHttpListener
     public class WebSocketSharpListener : IHttpListener
     {
     {
-        private readonly ConcurrentDictionary<string, string> _localEndPoints = new ConcurrentDictionary<string, string>(StringComparer.OrdinalIgnoreCase);
         private WebSocketSharp.Net.HttpListener _listener;
         private WebSocketSharp.Net.HttpListener _listener;
         private readonly AutoResetEvent _listenForNextRequest = new AutoResetEvent(false);
         private readonly AutoResetEvent _listenForNextRequest = new AutoResetEvent(false);
 
 
         private readonly ILogger _logger;
         private readonly ILogger _logger;
+        private readonly Action<string> _endpointListener;
 
 
-        public WebSocketSharpListener(ILogger logger)
+        public WebSocketSharpListener(ILogger logger, Action<string> endpointListener)
         {
         {
             _logger = logger;
             _logger = logger;
-        }
-
-        public IEnumerable<string> LocalEndPoints
-        {
-            get { return _localEndPoints.Keys.ToList(); }
+            _endpointListener = endpointListener;
         }
         }
 
 
         public Action<Exception, IRequest> ErrorHandler { get; set; }
         public Action<Exception, IRequest> ErrorHandler { get; set; }
@@ -170,7 +165,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
             {
             {
                 var address = endpoint.ToString();
                 var address = endpoint.ToString();
 
 
-                _localEndPoints.GetOrAdd(address, address);
+                _endpointListener(address);
             }
             }
 
 
             LogRequest(_logger, request);
             LogRequest(_logger, request);

+ 10 - 1
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",
     "TabMusicVideos": "\u0645\u0648\u0633\u064a\u0642\u0649 \u0627\u0644\u0641\u064a\u062f\u064a\u0648",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Music Videos",
     "TabMusicVideos": "Music Videos",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Hudebn\u00ed videa",
     "TabMusicVideos": "Hudebn\u00ed videa",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/da.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Musik Videoer",
     "TabMusicVideos": "Musik Videoer",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/de.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Musikvideos",
     "TabMusicVideos": "Musikvideos",
     "BirthPlaceValue": "Geburtsort: {0}",
     "BirthPlaceValue": "Geburtsort: {0}",
     "DeathDateValue": "Gestorben: {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)"
 }
 }

+ 10 - 1
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",
     "TabMusicVideos": "\u039c\u03bf\u03c5\u03c3\u03b9\u03ba\u03ac \u03b2\u03af\u03bd\u03c4\u03b5\u03bf",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Music Videos",
     "TabMusicVideos": "Music Videos",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Music Videos",
     "TabMusicVideos": "Music Videos",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/es.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Videos Musicales",
     "TabMusicVideos": "Videos Musicales",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Videos Musicales",
     "TabMusicVideos": "Videos Musicales",
     "BirthPlaceValue": "Lugar de nacimiento: {0}",
     "BirthPlaceValue": "Lugar de nacimiento: {0}",
     "DeathDateValue": "Fallcimiento: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Videos musicales",
     "TabMusicVideos": "Videos musicales",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/he.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "\u05e7\u05dc\u05d9\u05e4\u05d9\u05dd",
     "TabMusicVideos": "\u05e7\u05dc\u05d9\u05e4\u05d9\u05dd",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/it.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Video Musicali",
     "TabMusicVideos": "Video Musicali",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 63 - 54
MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json

@@ -383,58 +383,67 @@
     "LabelImageFetchersHelp": "Enable and rank your preferred image fetchers in order of priority.",
     "LabelImageFetchersHelp": "Enable and rank your preferred image fetchers in order of priority.",
     "ButtonQueueAllFromHere": "Queue all from here",
     "ButtonQueueAllFromHere": "Queue all from here",
     "ButtonPlayAllFromHere": "Play 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)"
 }
 }

+ 19 - 10
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",
     "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",
     "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?",
     "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",
     "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.",
     "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...",
     "OptionNewCollection": "\u0416\u0430\u04a3\u0430...",
@@ -275,7 +275,7 @@
     "OptionGenres": "\u0416\u0430\u043d\u0440\u043b\u0430\u0440",
     "OptionGenres": "\u0416\u0430\u043d\u0440\u043b\u0430\u0440",
     "OptionParentalRating": "\u0416\u0430\u0441\u0442\u0430\u0441 \u0441\u0430\u043d\u0430\u0442",
     "OptionParentalRating": "\u0416\u0430\u0441\u0442\u0430\u0441 \u0441\u0430\u043d\u0430\u0442",
     "OptionPeople": "\u0410\u0434\u0430\u043c\u0434\u0430\u0440",
     "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",
     "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",
     "OptionBirthLocation": "\u0422\u0443\u0493\u0430\u043d \u043e\u0440\u043d\u044b",
     "LabelAllChannels": "\u0411\u0430\u0440\u043b\u044b\u049b \u0430\u0440\u043d\u0430\u043b\u0430\u0440",
     "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",
     "TabMusicVideos": "\u0411\u0435\u0439\u043d\u0435\u043a\u043b\u0438\u043f\u0442\u0435\u0440",
     "BirthPlaceValue": "\u0422\u0443\u0493\u0430\u043d \u043e\u0440\u043d\u044b: {0}",
     "BirthPlaceValue": "\u0422\u0443\u0493\u0430\u043d \u043e\u0440\u043d\u044b: {0}",
     "DeathDateValue": "\u04e8\u043b\u0433\u0435\u043d\u0456: {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"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Music Videos",
     "TabMusicVideos": "Music Videos",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Musikk-videoer",
     "TabMusicVideos": "Musikk-videoer",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Music Videos",
     "TabMusicVideos": "Music Videos",
     "BirthPlaceValue": "Geboorte plaats: {0})",
     "BirthPlaceValue": "Geboorte plaats: {0})",
     "DeathDateValue": "Overleden: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Teledyski",
     "TabMusicVideos": "Teledyski",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 12 - 3
MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json

@@ -58,14 +58,14 @@
     "ButtonMute": "Mudo",
     "ButtonMute": "Mudo",
     "ButtonUnmute": "Remover Mudo",
     "ButtonUnmute": "Remover Mudo",
     "ButtonStop": "Parar",
     "ButtonStop": "Parar",
-    "ButtonNextTrack": "Faixa seguinte",
+    "ButtonNextTrack": "Pr\u00f3xima Faixa",
     "ButtonPause": "Pausar",
     "ButtonPause": "Pausar",
     "ButtonPlay": "Reproduzir",
     "ButtonPlay": "Reproduzir",
     "ButtonEdit": "Editar",
     "ButtonEdit": "Editar",
     "ButtonQueue": "Adicionar \u00e0 fila",
     "ButtonQueue": "Adicionar \u00e0 fila",
     "ButtonPlayTrailer": "Reproduzir trailer",
     "ButtonPlayTrailer": "Reproduzir trailer",
     "ButtonPlaylist": "Lista de reprodu\u00e7\u00e3o",
     "ButtonPlaylist": "Lista de reprodu\u00e7\u00e3o",
-    "ButtonPreviousTrack": "Faixa anterior",
+    "ButtonPreviousTrack": "Faixa Anterior",
     "LabelEnabled": "Ativada",
     "LabelEnabled": "Ativada",
     "LabelDisabled": "Desativada",
     "LabelDisabled": "Desativada",
     "ButtonMoreInformation": "Mais informa\u00e7\u00f5es",
     "ButtonMoreInformation": "Mais informa\u00e7\u00f5es",
@@ -429,5 +429,14 @@
     "TabMusicVideos": "V\u00eddeos Musicais",
     "TabMusicVideos": "V\u00eddeos Musicais",
     "BirthPlaceValue": "Local de nascimento: {0}",
     "BirthPlaceValue": "Local de nascimento: {0}",
     "DeathDateValue": "Morte: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Videos Musicais",
     "TabMusicVideos": "Videos Musicais",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 12 - 3
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",
     "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",
     "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.",
     "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.",
     "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.",
     "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",
     "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",
     "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.",
     "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",
     "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",
     "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.",
     "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",
     "ButtonSignOut": "\u0412\u044b\u0439\u0442\u0438",
@@ -429,5 +429,14 @@
     "TabMusicVideos": "\u041a\u043b\u0438\u043f\u044b",
     "TabMusicVideos": "\u041a\u043b\u0438\u043f\u044b",
     "BirthPlaceValue": "\u041c\u0435\u0441\u0442\u043e \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f: {0}",
     "BirthPlaceValue": "\u041c\u0435\u0441\u0442\u043e \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f: {0}",
     "DeathDateValue": "\u041a\u043e\u043d\u0447\u0438\u043d\u0430: {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"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Musikvideor",
     "TabMusicVideos": "Musikvideor",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Klipler",
     "TabMusicVideos": "Klipler",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "C\u00e1c video \u00e2m nh\u1ea1c",
     "TabMusicVideos": "C\u00e1c video \u00e2m nh\u1ea1c",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 1
MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json

@@ -429,5 +429,14 @@
     "TabMusicVideos": "Music Videos",
     "TabMusicVideos": "Music Videos",
     "BirthPlaceValue": "Birth place: {0}",
     "BirthPlaceValue": "Birth place: {0}",
     "DeathDateValue": "Died: {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)"
 }
 }

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/ar.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "\u0627\u0644\u0642\u0627\u062f\u0645",
     "TabUpcoming": "\u0627\u0644\u0642\u0627\u062f\u0645",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "\u0627\u0644\u0645\u0633\u0644\u0633\u0644\u0627\u062a",
     "TabShows": "\u0627\u0644\u0645\u0633\u0644\u0633\u0644\u0627\u062a",
+    "HeaderInstall": "Install",
     "TabEpisodes": "\u0627\u0644\u062d\u0644\u0642\u0627\u062a",
     "TabEpisodes": "\u0627\u0644\u062d\u0644\u0642\u0627\u062a",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "\u0627\u0646\u0648\u0627\u0639",
     "TabGenres": "\u0627\u0646\u0648\u0627\u0639",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "\u0627\u0644\u0646\u0627\u0633",
     "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",
     "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",
     "HeaderUsers": "\u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "\u0641\u0644\u062a\u0631\u0627\u062a:",
     "HeaderFilters": "\u0641\u0644\u062a\u0631\u0627\u062a:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "\u0641\u0644\u062a\u0631",
     "ButtonFilter": "\u0641\u0644\u062a\u0631",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "\u0627\u0644\u0645\u0641\u0636\u0644\u0627\u062a",
     "OptionFavorite": "\u0627\u0644\u0645\u0641\u0636\u0644\u0627\u062a",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "\u0645\u062d\u0628\u0628",
     "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",
     "OptionDislikes": "\u0645\u0643\u0631\u0648\u0647",
     "OptionActors": "\u0627\u0644\u0645\u0645\u062b\u0644\u0648\u0646",
     "OptionActors": "\u0627\u0644\u0645\u0645\u062b\u0644\u0648\u0646",
     "OptionGuestStars": "\u0636\u064a\u0648\u0641",
     "OptionGuestStars": "\u0636\u064a\u0648\u0641",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/ca.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "Upcoming",
     "TabUpcoming": "Upcoming",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "Shows",
     "TabShows": "Shows",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Episodes",
     "TabEpisodes": "Episodes",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "Genres",
     "TabGenres": "Genres",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "People",
     "TabPeople": "People",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "Networks",
     "TabNetworks": "Networks",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "Users",
     "HeaderUsers": "Users",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filters:",
     "HeaderFilters": "Filters:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filter",
     "ButtonFilter": "Filter",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favorites",
     "OptionFavorite": "Favorites",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Likes",
     "OptionLikes": "Likes",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Dislikes",
     "OptionDislikes": "Dislikes",
     "OptionActors": "Actors",
     "OptionActors": "Actors",
     "OptionGuestStars": "Guest Stars",
     "OptionGuestStars": "Guest Stars",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/da.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "Kommende",
     "TabUpcoming": "Kommende",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "Shows",
     "TabShows": "Shows",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Episoder",
     "TabEpisodes": "Episoder",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "Genre",
     "TabGenres": "Genre",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "Personer",
     "TabPeople": "Personer",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "Netv\u00e6rk",
     "TabNetworks": "Netv\u00e6rk",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "Brugere",
     "HeaderUsers": "Brugere",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filtre:",
     "HeaderFilters": "Filtre:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filter",
     "ButtonFilter": "Filter",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favoritter",
     "OptionFavorite": "Favoritter",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Likes",
     "OptionLikes": "Likes",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Dislikes",
     "OptionDislikes": "Dislikes",
     "OptionActors": "Skuespillere",
     "OptionActors": "Skuespillere",
     "OptionGuestStars": "G\u00e6ste Stjerner",
     "OptionGuestStars": "G\u00e6ste Stjerner",

+ 15 - 5
MediaBrowser.Server.Implementations/Localization/Server/de.json

@@ -158,7 +158,7 @@
     "LabelNewPasswordConfirm": "Neues Passwort wiederhohlen:",
     "LabelNewPasswordConfirm": "Neues Passwort wiederhohlen:",
     "OptionMakeOneTimeDonation": "Mache eine einmalige Spende",
     "OptionMakeOneTimeDonation": "Mache eine einmalige Spende",
     "HeaderCreatePassword": "Erstelle Passwort",
     "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:",
     "LabelCurrentPassword": "Aktuelles Passwort:",
     "OptionLifeTimeSupporterClubMembership": "Lebensl\u00e4ngliche Unterst\u00fctzer Club Mitgliedschaft",
     "OptionLifeTimeSupporterClubMembership": "Lebensl\u00e4ngliche Unterst\u00fctzer Club Mitgliedschaft",
     "LabelMaxParentalRating": "H\u00f6chste erlaubte elterlich Bewertung:",
     "LabelMaxParentalRating": "H\u00f6chste erlaubte elterlich Bewertung:",
@@ -184,23 +184,33 @@
     "MessageNothingHere": "Nichts hier.",
     "MessageNothingHere": "Nichts hier.",
     "OptionWriter": "Drehbuchautor",
     "OptionWriter": "Drehbuchautor",
     "MessagePleaseEnsureInternetMetadata": "Bitte sicherstellen, dass das Herunterladen von Internet Metadaten aktiviert ist.",
     "MessagePleaseEnsureInternetMetadata": "Bitte sicherstellen, dass das Herunterladen von Internet Metadaten aktiviert ist.",
-    "LabelAirDays": "Air days:",
+    "LabelAirDays": "Ausstrahlungstage:",
     "TabSuggested": "Vorgeschlagen",
     "TabSuggested": "Vorgeschlagen",
-    "LabelAirTime": "Air time:",
+    "LabelAirTime": "Ausstrahlungszeit:",
     "TabLatest": "Neueste",
     "TabLatest": "Neueste",
-    "HeaderMediaInfo": "Media Info",
+    "HeaderMediaInfo": "Medieninformation",
     "TabUpcoming": "Bevorstehend",
     "TabUpcoming": "Bevorstehend",
-    "HeaderPhotoInfo": "Photo Info",
+    "HeaderPhotoInfo": "Fotoinformation",
     "TabShows": "Shows",
     "TabShows": "Shows",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Episoden",
     "TabEpisodes": "Episoden",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "Genres",
     "TabGenres": "Genres",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "Personen",
     "TabPeople": "Personen",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "Sendergruppen",
     "TabNetworks": "Sendergruppen",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "Benutzer",
     "HeaderUsers": "Benutzer",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filter:",
     "HeaderFilters": "Filter:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filter",
     "ButtonFilter": "Filter",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favoriten",
     "OptionFavorite": "Favoriten",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Likes",
     "OptionLikes": "Likes",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Dislikes",
     "OptionDislikes": "Dislikes",
     "OptionActors": "Darsteller",
     "OptionActors": "Darsteller",
     "OptionGuestStars": "Gaststar",
     "OptionGuestStars": "Gaststar",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/el.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "\u0395\u03c0\u03b5\u03c1\u03c7\u03cc\u03bc\u03b5\u03bd\u03b7",
     "TabUpcoming": "\u0395\u03c0\u03b5\u03c1\u03c7\u03cc\u03bc\u03b5\u03bd\u03b7",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "\u0395\u03c0\u03b5\u03b9\u03c3\u03cc\u03b4\u03b9\u03b1",
     "TabShows": "\u0395\u03c0\u03b5\u03b9\u03c3\u03cc\u03b4\u03b9\u03b1",
+    "HeaderInstall": "Install",
     "TabEpisodes": "\u0395\u03c0\u03b5\u03b9\u03c3\u03cc\u03b4\u03b9\u03b1",
     "TabEpisodes": "\u0395\u03c0\u03b5\u03b9\u03c3\u03cc\u03b4\u03b9\u03b1",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "\u0395\u03af\u03b4\u03b7",
     "TabGenres": "\u0395\u03af\u03b4\u03b7",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "\u0386\u03bd\u03b8\u03c1\u03c9\u03c0\u03bf\u03b9 ",
     "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",
     "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 ",
     "HeaderUsers": "\u03a7\u03c1\u03ae\u03c3\u03c4\u03b5\u03c2 ",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "\u03a6\u03af\u03bb\u03c4\u03c1\u03b1",
     "HeaderFilters": "\u03a6\u03af\u03bb\u03c4\u03c1\u03b1",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "\u03c6\u03af\u03bb\u03c4\u03c1\u03bf",
     "ButtonFilter": "\u03c6\u03af\u03bb\u03c4\u03c1\u03bf",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "\u0391\u03b3\u03b1\u03c0\u03b7\u03bc\u03ad\u03bd\u03b1",
     "OptionFavorite": "\u0391\u03b3\u03b1\u03c0\u03b7\u03bc\u03ad\u03bd\u03b1",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "\u03a3\u03c5\u03bc\u03c0\u03b1\u03b8\u03b5\u03af",
     "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",
     "OptionDislikes": "\u0391\u03bd\u03c4\u03b9\u03c0\u03b1\u03b8\u03b5\u03af",
     "OptionActors": "\u0397\u03b8\u03bf\u03c0\u03bf\u03b9\u03bf\u03af",
     "OptionActors": "\u0397\u03b8\u03bf\u03c0\u03bf\u03b9\u03bf\u03af",
     "OptionGuestStars": "\u0393\u03ba\u03b5\u03c3\u03c4 \u03c3\u03c4\u03b1\u03c1",
     "OptionGuestStars": "\u0393\u03ba\u03b5\u03c3\u03c4 \u03c3\u03c4\u03b1\u03c1",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/en_GB.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "Upcoming",
     "TabUpcoming": "Upcoming",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "Shows",
     "TabShows": "Shows",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Episodes",
     "TabEpisodes": "Episodes",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "Genres",
     "TabGenres": "Genres",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "People",
     "TabPeople": "People",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "Networks",
     "TabNetworks": "Networks",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "Users",
     "HeaderUsers": "Users",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filters:",
     "HeaderFilters": "Filters:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filter",
     "ButtonFilter": "Filter",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favourites",
     "OptionFavorite": "Favourites",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Likes",
     "OptionLikes": "Likes",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Dislikes",
     "OptionDislikes": "Dislikes",
     "OptionActors": "Actors",
     "OptionActors": "Actors",
     "OptionGuestStars": "Guest Stars",
     "OptionGuestStars": "Guest Stars",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/en_US.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "Upcoming",
     "TabUpcoming": "Upcoming",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "Shows",
     "TabShows": "Shows",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Episodes",
     "TabEpisodes": "Episodes",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "Genres",
     "TabGenres": "Genres",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "People",
     "TabPeople": "People",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "Networks",
     "TabNetworks": "Networks",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "Users",
     "HeaderUsers": "Users",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filters:",
     "HeaderFilters": "Filters:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filter",
     "ButtonFilter": "Filter",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favorites",
     "OptionFavorite": "Favorites",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Likes",
     "OptionLikes": "Likes",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Dislikes",
     "OptionDislikes": "Dislikes",
     "OptionActors": "Actors",
     "OptionActors": "Actors",
     "OptionGuestStars": "Guest Stars",
     "OptionGuestStars": "Guest Stars",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/es.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "Pr\u00f3ximos",
     "TabUpcoming": "Pr\u00f3ximos",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "Programas",
     "TabShows": "Programas",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Episodios",
     "TabEpisodes": "Episodios",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "G\u00e9neros",
     "TabGenres": "G\u00e9neros",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "Gente",
     "TabPeople": "Gente",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "redes",
     "TabNetworks": "redes",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "Usuarios",
     "HeaderUsers": "Usuarios",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filtros:",
     "HeaderFilters": "Filtros:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filtro",
     "ButtonFilter": "Filtro",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favoritos",
     "OptionFavorite": "Favoritos",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Me gusta",
     "OptionLikes": "Me gusta",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "No me gusta",
     "OptionDislikes": "No me gusta",
     "OptionActors": "Actores",
     "OptionActors": "Actores",
     "OptionGuestStars": "Estrellas invitadas",
     "OptionGuestStars": "Estrellas invitadas",

+ 17 - 7
MediaBrowser.Server.Implementations/Localization/Server/es_MX.json

@@ -156,9 +156,9 @@
     "LabelNewPassword": "Nueva contrase\u00f1a:",
     "LabelNewPassword": "Nueva contrase\u00f1a:",
     "HeaderDonationType": "Tipo de Donaci\u00f3n:",
     "HeaderDonationType": "Tipo de Donaci\u00f3n:",
     "LabelNewPasswordConfirm": "Confirmaci\u00f3n de contrase\u00f1a nueva:",
     "LabelNewPasswordConfirm": "Confirmaci\u00f3n de contrase\u00f1a nueva:",
-    "OptionMakeOneTimeDonation": "Hacer una donaci\u00f3n \u00fanica",
+    "OptionMakeOneTimeDonation": "Hacer una donaci\u00f3n independiente",
     "HeaderCreatePassword": "Crear Contrase\u00f1a",
     "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:",
     "LabelCurrentPassword": "Contrase\u00f1a actual:",
     "OptionLifeTimeSupporterClubMembership": "Membres\u00eda vitalicia del club de aficionados",
     "OptionLifeTimeSupporterClubMembership": "Membres\u00eda vitalicia del club de aficionados",
     "LabelMaxParentalRating": "M\u00e1xima clasificaci\u00f3n parental permitida:",
     "LabelMaxParentalRating": "M\u00e1xima clasificaci\u00f3n parental permitida:",
@@ -184,23 +184,33 @@
     "MessageNothingHere": "Nada aqu\u00ed.",
     "MessageNothingHere": "Nada aqu\u00ed.",
     "OptionWriter": "Escritor",
     "OptionWriter": "Escritor",
     "MessagePleaseEnsureInternetMetadata": "Por favor aseg\u00farese que la descarga de metadatos de internet esta habilitada.",
     "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",
     "TabSuggested": "Sugerencias",
-    "LabelAirTime": "Air time:",
+    "LabelAirTime": "Duraci\u00f3n:",
     "TabLatest": "Recientes",
     "TabLatest": "Recientes",
-    "HeaderMediaInfo": "Media Info",
+    "HeaderMediaInfo": "Info del Medio:",
     "TabUpcoming": "Por Estrenar",
     "TabUpcoming": "Por Estrenar",
-    "HeaderPhotoInfo": "Photo Info",
+    "HeaderPhotoInfo": "Info de Fotograf\u00eda:",
     "TabShows": "Programas",
     "TabShows": "Programas",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Episodios",
     "TabEpisodes": "Episodios",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "G\u00e9neros",
     "TabGenres": "G\u00e9neros",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "Personas",
     "TabPeople": "Personas",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "Cadenas",
     "TabNetworks": "Cadenas",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "Usuarios",
     "HeaderUsers": "Usuarios",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filtros:",
     "HeaderFilters": "Filtros:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filtro",
     "ButtonFilter": "Filtro",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favoritos",
     "OptionFavorite": "Favoritos",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Me gusta",
     "OptionLikes": "Me gusta",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "No me gusta",
     "OptionDislikes": "No me gusta",
     "OptionActors": "Actores",
     "OptionActors": "Actores",
     "OptionGuestStars": "Estrellas Invitadas",
     "OptionGuestStars": "Estrellas Invitadas",
@@ -225,7 +235,7 @@
     "OptionAscending": "Ascendente",
     "OptionAscending": "Ascendente",
     "OptionDescending": "Descendente",
     "OptionDescending": "Descendente",
     "OptionRuntime": "Duraci\u00f3n",
     "OptionRuntime": "Duraci\u00f3n",
-    "OptionReleaseDate": "Release Date",
+    "OptionReleaseDate": "Fecha de Liberaci\u00f3n",
     "OptionPlayCount": "N\u00famero de Reproducc.",
     "OptionPlayCount": "N\u00famero de Reproducc.",
     "OptionDatePlayed": "Fecha de Reproducci\u00f3n",
     "OptionDatePlayed": "Fecha de Reproducci\u00f3n",
     "OptionDateAdded": "Fecha de Adici\u00f3n",
     "OptionDateAdded": "Fecha de Adici\u00f3n",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/fr.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "\u00c0 venir",
     "TabUpcoming": "\u00c0 venir",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "S\u00e9ries",
     "TabShows": "S\u00e9ries",
+    "HeaderInstall": "Install",
     "TabEpisodes": "\u00c9pisodes",
     "TabEpisodes": "\u00c9pisodes",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "Genres",
     "TabGenres": "Genres",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "Personnes",
     "TabPeople": "Personnes",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "R\u00e9seaux",
     "TabNetworks": "R\u00e9seaux",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "Utilisateurs",
     "HeaderUsers": "Utilisateurs",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filtres:",
     "HeaderFilters": "Filtres:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filtre",
     "ButtonFilter": "Filtre",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favoris",
     "OptionFavorite": "Favoris",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Aim\u00e9s",
     "OptionLikes": "Aim\u00e9s",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Non aim\u00e9s",
     "OptionDislikes": "Non aim\u00e9s",
     "OptionActors": "Acteurs",
     "OptionActors": "Acteurs",
     "OptionGuestStars": "Guest Stars",
     "OptionGuestStars": "Guest Stars",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/he.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "\u05d1\u05e7\u05e8\u05d5\u05d1",
     "TabUpcoming": "\u05d1\u05e7\u05e8\u05d5\u05d1",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "\u05ea\u05d5\u05db\u05e0\u05d9\u05d5\u05ea",
     "TabShows": "\u05ea\u05d5\u05db\u05e0\u05d9\u05d5\u05ea",
+    "HeaderInstall": "Install",
     "TabEpisodes": "\u05e4\u05e8\u05e7\u05d9\u05dd",
     "TabEpisodes": "\u05e4\u05e8\u05e7\u05d9\u05dd",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "\u05d6\u05d0\u05e0\u05e8\u05d9\u05dd",
     "TabGenres": "\u05d6\u05d0\u05e0\u05e8\u05d9\u05dd",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "\u05d0\u05e0\u05e9\u05d9\u05dd",
     "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",
     "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",
     "HeaderUsers": "\u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "\u05de\u05e1\u05e0\u05e0\u05d9\u05dd:",
     "HeaderFilters": "\u05de\u05e1\u05e0\u05e0\u05d9\u05dd:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "\u05de\u05e1\u05e0\u05df",
     "ButtonFilter": "\u05de\u05e1\u05e0\u05df",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "\u05de\u05d5\u05e2\u05d3\u05e4\u05d9\u05dd",
     "OptionFavorite": "\u05de\u05d5\u05e2\u05d3\u05e4\u05d9\u05dd",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "\u05e0\u05d1\u05d7\u05e8\u05d9\u05dd",
     "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",
     "OptionDislikes": "\u05dc\u05d0 \u05d0\u05d5\u05d4\u05d1",
     "OptionActors": "\u05e9\u05d7\u05e7\u05e0\u05d9\u05dd",
     "OptionActors": "\u05e9\u05d7\u05e7\u05e0\u05d9\u05dd",
     "OptionGuestStars": "\u05e9\u05d7\u05e7\u05df \u05d0\u05d5\u05e8\u05d7",
     "OptionGuestStars": "\u05e9\u05d7\u05e7\u05df \u05d0\u05d5\u05e8\u05d7",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/it.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "IN ONDA A BREVE",
     "TabUpcoming": "IN ONDA A BREVE",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "Serie",
     "TabShows": "Serie",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Episodi",
     "TabEpisodes": "Episodi",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "Generi",
     "TabGenres": "Generi",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "Attori",
     "TabPeople": "Attori",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "Internet",
     "TabNetworks": "Internet",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "Utenti",
     "HeaderUsers": "Utenti",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filtri",
     "HeaderFilters": "Filtri",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filtro",
     "ButtonFilter": "Filtro",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Preferiti",
     "OptionFavorite": "Preferiti",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Belli",
     "OptionLikes": "Belli",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Brutti",
     "OptionDislikes": "Brutti",
     "OptionActors": "Attori",
     "OptionActors": "Attori",
     "OptionGuestStars": "Guest Stars",
     "OptionGuestStars": "Guest Stars",

+ 30 - 20
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",
     "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:",
     "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.",
     "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",
     "ButtonOk": "\u0416\u0430\u0440\u0430\u0439\u0434\u044b",
     "LabelMetascore": "Metascore \u0431\u0430\u0493\u0430\u043b\u0430\u0443\u044b:",
     "LabelMetascore": "Metascore \u0431\u0430\u0493\u0430\u043b\u0430\u0443\u044b:",
     "ButtonCancel": "\u0411\u043e\u043b\u0434\u044b\u0440\u043c\u0430\u0443",
     "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",
     "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",
     "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.",
     "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",
     "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:",
     "LabelParentalRating": "\u0416\u0430\u0441\u0442\u0430\u0441 \u0441\u0430\u043d\u0430\u0442\u044b:",
     "TabPassword": "\u049a\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437",
     "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",
     "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:",
     "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:",
     "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",
     "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:",
     "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",
     "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:",
     "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.",
     "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",
     "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.",
     "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",
     "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",
     "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",
     "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",
     "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",
     "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",
     "TabGenres": "\u0416\u0430\u043d\u0440\u043b\u0430\u0440",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "\u0410\u0434\u0430\u043c\u0434\u0430\u0440",
     "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",
     "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",
     "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:",
     "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",
     "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",
     "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",
     "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",
     "OptionDislikes": "\u04b0\u043d\u0430\u0442\u043f\u0430\u0443\u043b\u0430\u0440",
     "OptionActors": "\u0410\u043a\u0442\u0435\u0440\u043b\u0435\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",
     "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",
     "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",
     "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",
     "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",
     "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",
     "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",
     "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",
     "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.",
     "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",
     "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.",
     "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.",
     "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.",
     "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.",
     "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:",
     "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.",
     "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",
     "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:",
     "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.",
     "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.",
     "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:",
     "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.",
     "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",
     "OptionList": "\u0422\u0456\u0437\u0456\u043c",
     "TabDashboard": "\u0411\u0430\u049b\u044b\u043b\u0430\u0443 \u0442\u0430\u049b\u0442\u0430\u0441\u044b",
     "TabDashboard": "\u0411\u0430\u049b\u044b\u043b\u0430\u0443 \u0442\u0430\u049b\u0442\u0430\u0441\u044b",
     "TitleServer": "\u0421\u0435\u0440\u0432\u0435\u0440",
     "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",
     "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",
     "HeaderBranding": "\u0411\u0440\u0435\u043d\u0434\u0438\u04a3\u0433",
     "HeaderApiKeys": "API \u043a\u0456\u043b\u0442\u0442\u0435\u0440\u0456",
     "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",
     "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",
     "TitleUsers": "\u041f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043b\u0430\u0440",
     "LabelProtocol": "\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b:",
     "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)",
     "OptionProtocolHls": "Http \u0422\u0456\u043a\u0435\u043b\u0435\u0439 \u0410\u0493\u044b\u043d (HLS)",
     "LabelContext": "\u041c\u04d9\u0442\u0456\u043d\u043c\u04d9\u043d:",
     "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",
     "OptionContextStreaming": "\u0410\u0493\u044b\u043d\u043c\u0435\u043d \u0442\u0430\u0441\u044b\u043c\u0430\u043b\u0434\u0430\u0443",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/ko.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "Upcoming",
     "TabUpcoming": "Upcoming",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "Shows",
     "TabShows": "Shows",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Episodes",
     "TabEpisodes": "Episodes",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "Genres",
     "TabGenres": "Genres",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "People",
     "TabPeople": "People",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "Networks",
     "TabNetworks": "Networks",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "Users",
     "HeaderUsers": "Users",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filters:",
     "HeaderFilters": "Filters:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filter",
     "ButtonFilter": "Filter",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favorites",
     "OptionFavorite": "Favorites",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Likes",
     "OptionLikes": "Likes",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Dislikes",
     "OptionDislikes": "Dislikes",
     "OptionActors": "Actors",
     "OptionActors": "Actors",
     "OptionGuestStars": "Guest Stars",
     "OptionGuestStars": "Guest Stars",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/ms.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "Upcoming",
     "TabUpcoming": "Upcoming",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "Shows",
     "TabShows": "Shows",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Episodes",
     "TabEpisodes": "Episodes",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "Genres",
     "TabGenres": "Genres",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "People",
     "TabPeople": "People",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "Networks",
     "TabNetworks": "Networks",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "Users",
     "HeaderUsers": "Users",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filters:",
     "HeaderFilters": "Filters:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filter",
     "ButtonFilter": "Filter",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favorites",
     "OptionFavorite": "Favorites",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Likes",
     "OptionLikes": "Likes",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Dislikes",
     "OptionDislikes": "Dislikes",
     "OptionActors": "Actors",
     "OptionActors": "Actors",
     "OptionGuestStars": "Guest Stars",
     "OptionGuestStars": "Guest Stars",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/nb.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "Kommer",
     "TabUpcoming": "Kommer",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "Show",
     "TabShows": "Show",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Episoder",
     "TabEpisodes": "Episoder",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "Sjanger",
     "TabGenres": "Sjanger",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "Folk",
     "TabPeople": "Folk",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "Nettverk",
     "TabNetworks": "Nettverk",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "Bruker",
     "HeaderUsers": "Bruker",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filtre",
     "HeaderFilters": "Filtre",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filter",
     "ButtonFilter": "Filter",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favoritter",
     "OptionFavorite": "Favoritter",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Liker",
     "OptionLikes": "Liker",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Misliker",
     "OptionDislikes": "Misliker",
     "OptionActors": "Skuespiller",
     "OptionActors": "Skuespiller",
     "OptionGuestStars": "Gjeste-opptredelser",
     "OptionGuestStars": "Gjeste-opptredelser",

+ 26 - 16
MediaBrowser.Server.Implementations/Localization/Server/nl.json

@@ -158,7 +158,7 @@
     "LabelNewPasswordConfirm": "Bevestig nieuw wachtwoord:",
     "LabelNewPasswordConfirm": "Bevestig nieuw wachtwoord:",
     "OptionMakeOneTimeDonation": "Doe een eenmalige donatie",
     "OptionMakeOneTimeDonation": "Doe een eenmalige donatie",
     "HeaderCreatePassword": "Maak wachtwoord",
     "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",
     "LabelCurrentPassword": "Huidig wachtwoord",
     "OptionLifeTimeSupporterClubMembership": "Levenslang supporters club lidmaatschap",
     "OptionLifeTimeSupporterClubMembership": "Levenslang supporters club lidmaatschap",
     "LabelMaxParentalRating": "Maximaal toegestane kijkwijzer classificatie:",
     "LabelMaxParentalRating": "Maximaal toegestane kijkwijzer classificatie:",
@@ -172,35 +172,45 @@
     "ButtonDeleteImage": "Verwijder afbeelding",
     "ButtonDeleteImage": "Verwijder afbeelding",
     "LabelOneTimeDonationAmount": "Donatie bedrag:",
     "LabelOneTimeDonationAmount": "Donatie bedrag:",
     "LabelSelectUsers": "Selecteer gebruikers:",
     "LabelSelectUsers": "Selecteer gebruikers:",
-    "OptionActor": "Actor",
+    "OptionActor": "Acteur",
     "ButtonUpload": "Uploaden",
     "ButtonUpload": "Uploaden",
-    "OptionComposer": "Composer",
+    "OptionComposer": "Componist",
     "HeaderUploadNewImage": "Nieuwe afbeelding uploaden",
     "HeaderUploadNewImage": "Nieuwe afbeelding uploaden",
-    "OptionDirector": "Director",
+    "OptionDirector": "Regiseur",
     "LabelDropImageHere": "Afbeelding hier neerzetten",
     "LabelDropImageHere": "Afbeelding hier neerzetten",
-    "OptionGuestStar": "Guest star",
+    "OptionGuestStar": "Gast ster",
     "ImageUploadAspectRatioHelp": "1:1 beeldverhouding geadviseerd. Alleen JPG\/PNG.",
     "ImageUploadAspectRatioHelp": "1:1 beeldverhouding geadviseerd. Alleen JPG\/PNG.",
-    "OptionProducer": "Producer",
+    "OptionProducer": "Producent",
     "MessageNothingHere": "Lijst is leeg.",
     "MessageNothingHere": "Lijst is leeg.",
-    "OptionWriter": "Writer",
+    "OptionWriter": "Schrijver",
     "MessagePleaseEnsureInternetMetadata": "Zorg ervoor dat het downloaden van metadata van het internet is ingeschakeld.",
     "MessagePleaseEnsureInternetMetadata": "Zorg ervoor dat het downloaden van metadata van het internet is ingeschakeld.",
-    "LabelAirDays": "Air days:",
+    "LabelAirDays": "Uitzend dagen:",
     "TabSuggested": "Aanbevolen",
     "TabSuggested": "Aanbevolen",
-    "LabelAirTime": "Air time:",
+    "LabelAirTime": "Uitzend tijd:",
     "TabLatest": "Nieuw",
     "TabLatest": "Nieuw",
-    "HeaderMediaInfo": "Media Info",
+    "HeaderMediaInfo": "Media informatie",
     "TabUpcoming": "Binnenkort",
     "TabUpcoming": "Binnenkort",
-    "HeaderPhotoInfo": "Photo Info",
+    "HeaderPhotoInfo": "Foto informatie",
     "TabShows": "Series",
     "TabShows": "Series",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Afleveringen",
     "TabEpisodes": "Afleveringen",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "Genres",
     "TabGenres": "Genres",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "Personen",
     "TabPeople": "Personen",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "TV-Studio's",
     "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",
     "HeaderUsers": "Gebruikers",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filters:",
     "HeaderFilters": "Filters:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filter",
     "ButtonFilter": "Filter",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favorieten",
     "OptionFavorite": "Favorieten",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Leuk",
     "OptionLikes": "Leuk",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Niet leuk",
     "OptionDislikes": "Niet leuk",
     "OptionActors": "Acteurs",
     "OptionActors": "Acteurs",
     "OptionGuestStars": "Gast Sterren",
     "OptionGuestStars": "Gast Sterren",
@@ -854,15 +864,15 @@
     "LabelDisplayPluginsFor": "Toon Plug-ins voor:",
     "LabelDisplayPluginsFor": "Toon Plug-ins voor:",
     "PluginTabMediaBrowserClassic": "MB Classic",
     "PluginTabMediaBrowserClassic": "MB Classic",
     "PluginTabMediaBrowserTheater": "MB Theater",
     "PluginTabMediaBrowserTheater": "MB Theater",
-    "LabelEpisodeNamePlain": "Episode name",
-    "LabelSeriesNamePlain": "Series name",
+    "LabelEpisodeNamePlain": "Naam aflevering",
+    "LabelSeriesNamePlain": "Naam serie",
     "ValueSeriesNamePeriod": "Serie.Naam",
     "ValueSeriesNamePeriod": "Serie.Naam",
     "ValueSeriesNameUnderscore": "Serie_naam",
     "ValueSeriesNameUnderscore": "Serie_naam",
     "ValueEpisodeNamePeriod": "Aflevering.naam",
     "ValueEpisodeNamePeriod": "Aflevering.naam",
     "ValueEpisodeNameUnderscore": "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",
     "HeaderTypeText": "Voer tekst in",
     "LabelTypeText": "Tekst",
     "LabelTypeText": "Tekst",
     "HeaderSearchForSubtitles": "Zoeken naar Ondertitels",
     "HeaderSearchForSubtitles": "Zoeken naar Ondertitels",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/pl.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "Upcoming",
     "TabUpcoming": "Upcoming",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "Seriale",
     "TabShows": "Seriale",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Odcinki",
     "TabEpisodes": "Odcinki",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "Rodzaje",
     "TabGenres": "Rodzaje",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "Osoby",
     "TabPeople": "Osoby",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "Sieci",
     "TabNetworks": "Sieci",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "U\u017cytkownicy",
     "HeaderUsers": "U\u017cytkownicy",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filtry:",
     "HeaderFilters": "Filtry:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filtr",
     "ButtonFilter": "Filtr",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Ulubione",
     "OptionFavorite": "Ulubione",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Likes",
     "OptionLikes": "Likes",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Dislikes",
     "OptionDislikes": "Dislikes",
     "OptionActors": "Aktorzy",
     "OptionActors": "Aktorzy",
     "OptionGuestStars": "Guest Stars",
     "OptionGuestStars": "Guest Stars",

+ 19 - 9
MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json

@@ -92,9 +92,9 @@
     "LabelSaveLocalMetadata": "Salvar artwork e metadados dentro das pastas da m\u00eddia",
     "LabelSaveLocalMetadata": "Salvar artwork e metadados dentro das pastas da m\u00eddia",
     "LabelEndDate": "Data final:",
     "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.",
     "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",
     "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.",
     "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):",
     "LabelRuntimeMinutes": "Dura\u00e7\u00e3o (minutos):",
     "TabPreferences": "Prefer\u00eancias",
     "TabPreferences": "Prefer\u00eancias",
@@ -156,9 +156,9 @@
     "LabelNewPassword": "Nova senha:",
     "LabelNewPassword": "Nova senha:",
     "HeaderDonationType": "Tipo de doa\u00e7\u00e3o:",
     "HeaderDonationType": "Tipo de doa\u00e7\u00e3o:",
     "LabelNewPasswordConfirm": "Confirmar nova senha:",
     "LabelNewPasswordConfirm": "Confirmar nova senha:",
-    "OptionMakeOneTimeDonation": "Fazer doa\u00e7\u00e3o uma \u00fanica vez",
+    "OptionMakeOneTimeDonation": "Fazer uma doa\u00e7\u00e3o \u00fanica",
     "HeaderCreatePassword": "Criar Senha",
     "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:",
     "LabelCurrentPassword": "Senha atual:",
     "OptionLifeTimeSupporterClubMembership": "Filia\u00e7\u00e3o vital\u00edcia do clube do colaborador",
     "OptionLifeTimeSupporterClubMembership": "Filia\u00e7\u00e3o vital\u00edcia do clube do colaborador",
     "LabelMaxParentalRating": "Classifica\u00e7\u00e3o parental m\u00e1xima permitida:",
     "LabelMaxParentalRating": "Classifica\u00e7\u00e3o parental m\u00e1xima permitida:",
@@ -184,23 +184,33 @@
     "MessageNothingHere": "Nada aqui.",
     "MessageNothingHere": "Nada aqui.",
     "OptionWriter": "Escritor",
     "OptionWriter": "Escritor",
     "MessagePleaseEnsureInternetMetadata": "Por favor, certifique-se que o download de metadados da internet est\u00e1 habilitado.",
     "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",
     "TabSuggested": "Sugeridos",
-    "LabelAirTime": "Air time:",
+    "LabelAirTime": "Hor\u00e1rio:",
     "TabLatest": "Recentes",
     "TabLatest": "Recentes",
-    "HeaderMediaInfo": "Media Info",
+    "HeaderMediaInfo": "Informa\u00e7\u00f5es da M\u00eddia",
     "TabUpcoming": "Por Estrear",
     "TabUpcoming": "Por Estrear",
-    "HeaderPhotoInfo": "Photo Info",
+    "HeaderPhotoInfo": "Informa\u00e7\u00f5es da Foto",
     "TabShows": "S\u00e9ries",
     "TabShows": "S\u00e9ries",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Epis\u00f3dios",
     "TabEpisodes": "Epis\u00f3dios",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "G\u00eaneros",
     "TabGenres": "G\u00eaneros",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "Pessoas",
     "TabPeople": "Pessoas",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "Redes",
     "TabNetworks": "Redes",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "Usu\u00e1rios",
     "HeaderUsers": "Usu\u00e1rios",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filtros:",
     "HeaderFilters": "Filtros:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filtro",
     "ButtonFilter": "Filtro",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favoritos",
     "OptionFavorite": "Favoritos",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Gostei",
     "OptionLikes": "Gostei",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "N\u00e3o Gostei",
     "OptionDislikes": "N\u00e3o Gostei",
     "OptionActors": "Atores",
     "OptionActors": "Atores",
     "OptionGuestStars": "Convidados Especiais",
     "OptionGuestStars": "Convidados Especiais",
@@ -288,7 +298,7 @@
     "HeaderStatus": "Status",
     "HeaderStatus": "Status",
     "OptionContinuing": "Em Exibi\u00e7\u00e3o",
     "OptionContinuing": "Em Exibi\u00e7\u00e3o",
     "OptionEnded": "Finalizada",
     "OptionEnded": "Finalizada",
-    "HeaderAirDays": "Dias de Exibi\u00e7\u00e3o",
+    "HeaderAirDays": "Dias da Exibi\u00e7\u00e3o",
     "OptionSunday": "Domingo",
     "OptionSunday": "Domingo",
     "OptionMonday": "Segunda-feira",
     "OptionMonday": "Segunda-feira",
     "OptionTuesday": "Ter\u00e7a-feira",
     "OptionTuesday": "Ter\u00e7a-feira",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "Pr\u00f3ximos",
     "TabUpcoming": "Pr\u00f3ximos",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "S\u00e9ries",
     "TabShows": "S\u00e9ries",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Epis\u00f3dios",
     "TabEpisodes": "Epis\u00f3dios",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "G\u00e9neros Art\u00edsticos",
     "TabGenres": "G\u00e9neros Art\u00edsticos",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "Pessoas",
     "TabPeople": "Pessoas",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "Redes",
     "TabNetworks": "Redes",
+    "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.",
     "HeaderUsers": "Utilizadores",
     "HeaderUsers": "Utilizadores",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filtros:",
     "HeaderFilters": "Filtros:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filtro",
     "ButtonFilter": "Filtro",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favoritos",
     "OptionFavorite": "Favoritos",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Gostos",
     "OptionLikes": "Gostos",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "N\u00e3o gostos",
     "OptionDislikes": "N\u00e3o gostos",
     "OptionActors": "Actores",
     "OptionActors": "Actores",
     "OptionGuestStars": "Actores convidados",
     "OptionGuestStars": "Actores convidados",

+ 28 - 18
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",
     "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:",
     "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.",
     "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",
     "ButtonOk": "\u041e\u041a",
     "LabelMetascore": "\u041e\u0446\u0435\u043d\u043a\u0430 Metascore:",
     "LabelMetascore": "\u041e\u0446\u0435\u043d\u043a\u0430 Metascore:",
     "ButtonCancel": "\u041e\u0442\u043c\u0435\u043d\u0430",
     "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",
     "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:",
     "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.",
     "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",
     "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:",
     "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",
     "TabPassword": "\u041f\u0430\u0440\u043e\u043b\u044c",
@@ -156,9 +156,9 @@
     "LabelNewPassword": "\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c",
     "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:",
     "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",
     "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",
     "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",
     "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",
     "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:",
     "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.",
     "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",
     "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.",
     "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",
     "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",
     "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",
     "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",
     "TabShows": "\u0426\u0438\u043a\u043b\u044b",
+    "HeaderInstall": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430",
     "TabEpisodes": "\u042d\u043f\u0438\u0437\u043e\u0434\u044b",
     "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",
     "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",
     "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",
     "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",
     "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:",
     "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",
     "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",
     "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",
     "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",
     "OptionDislikes": "\u041d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f",
     "OptionActors": "\u0410\u043a\u0442\u0451\u0440\u044b",
     "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",
     "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",
     "OptionDescending": "\u0423\u0431\u044b\u0432\u0430\u043d\u0438\u0435",
     "OptionRuntime": "\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c",
     "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",
     "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",
     "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",
     "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",
     "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.",
     "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",
     "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.",
     "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.",
     "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.",
     "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.",
     "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.",
     "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",
     "TabBasics": "\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435",
     "TabTV": "\u0422\u0412",
     "TabTV": "\u0422\u0412",
@@ -965,11 +975,11 @@
     "OptionList": "\u0421\u043f\u0438\u0441\u043e\u043a",
     "OptionList": "\u0421\u043f\u0438\u0441\u043e\u043a",
     "TabDashboard": "\u0418\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u044c",
     "TabDashboard": "\u0418\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u044c",
     "TitleServer": "\u0421\u0435\u0440\u0432\u0435\u0440",
     "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",
     "HeaderLatestMusic": "\u041d\u043e\u0432\u0438\u043d\u043a\u0438 \u043c\u0443\u0437\u044b\u043a\u0438",
     "HeaderBranding": "\u0411\u0440\u0435\u043d\u0434\u0438\u043d\u0433",
     "HeaderBranding": "\u0411\u0440\u0435\u043d\u0434\u0438\u043d\u0433",
     "HeaderApiKeys": "\u041a\u043b\u044e\u0447\u0438 API",
     "HeaderApiKeys": "\u041a\u043b\u044e\u0447\u0438 API",

+ 11 - 1
MediaBrowser.Server.Implementations/Localization/Server/server.json

@@ -1110,5 +1110,15 @@
     "LabelAirDays": "Air days:",
     "LabelAirDays": "Air days:",
     "LabelAirTime": "Air time:",
     "LabelAirTime": "Air time:",
     "HeaderMediaInfo": "Media Info",
     "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."
 }
 }

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/sv.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "Kommande",
     "TabUpcoming": "Kommande",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "Serier",
     "TabShows": "Serier",
+    "HeaderInstall": "Install",
     "TabEpisodes": "Avsnitt",
     "TabEpisodes": "Avsnitt",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "Genrer",
     "TabGenres": "Genrer",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "Personer",
     "TabPeople": "Personer",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "TV-bolag",
     "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",
     "HeaderUsers": "Anv\u00e4ndare",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filter:",
     "HeaderFilters": "Filter:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filtrera",
     "ButtonFilter": "Filtrera",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favoriter",
     "OptionFavorite": "Favoriter",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Gillar",
     "OptionLikes": "Gillar",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Ogillar",
     "OptionDislikes": "Ogillar",
     "OptionActors": "Sk\u00e5despelare",
     "OptionActors": "Sk\u00e5despelare",
     "OptionGuestStars": "G\u00e4startister",
     "OptionGuestStars": "G\u00e4startister",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/tr.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "Gelecek",
     "TabUpcoming": "Gelecek",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "G\u00f6steriler",
     "TabShows": "G\u00f6steriler",
+    "HeaderInstall": "Install",
     "TabEpisodes": "B\u00f6l\u00fcmler",
     "TabEpisodes": "B\u00f6l\u00fcmler",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "T\u00fcrler",
     "TabGenres": "T\u00fcrler",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "Oyuncular",
     "TabPeople": "Oyuncular",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "A\u011flar",
     "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",
     "HeaderUsers": "Kullan\u0131c\u0131lar",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filtrelemeler",
     "HeaderFilters": "Filtrelemeler",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filtre",
     "ButtonFilter": "Filtre",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Favoriler",
     "OptionFavorite": "Favoriler",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Be\u011feniler",
     "OptionLikes": "Be\u011feniler",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Be\u011fenmeyenler",
     "OptionDislikes": "Be\u011fenmeyenler",
     "OptionActors": "Akt\u00f6rler",
     "OptionActors": "Akt\u00f6rler",
     "OptionGuestStars": "Konuk oylar\u0131",
     "OptionGuestStars": "Konuk oylar\u0131",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/vi.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "S\u1eafp di\u1ec5n ra",
     "TabUpcoming": "S\u1eafp di\u1ec5n ra",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "Shows",
     "TabShows": "Shows",
+    "HeaderInstall": "Install",
     "TabEpisodes": "C\u00e1c t\u1eadp phim",
     "TabEpisodes": "C\u00e1c t\u1eadp phim",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "C\u00e1c th\u1ec3 lo\u1ea1i",
     "TabGenres": "C\u00e1c th\u1ec3 lo\u1ea1i",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "M\u1ecdi ng\u01b0\u1eddi",
     "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",
     "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",
     "HeaderUsers": "d\u00f9ng",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "Filters:",
     "HeaderFilters": "Filters:",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "Filter",
     "ButtonFilter": "Filter",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "Y\u00eau th\u00edch",
     "OptionFavorite": "Y\u00eau th\u00edch",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "Th\u00edch",
     "OptionLikes": "Th\u00edch",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "Kh\u00f4ng th\u00edch",
     "OptionDislikes": "Kh\u00f4ng th\u00edch",
     "OptionActors": "Di\u1ec5n vi\u00ean",
     "OptionActors": "Di\u1ec5n vi\u00ean",
     "OptionGuestStars": "Guest Stars",
     "OptionGuestStars": "Guest Stars",

+ 10 - 0
MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json

@@ -192,15 +192,25 @@
     "TabUpcoming": "\u5373\u5c07\u767c\u5e03",
     "TabUpcoming": "\u5373\u5c07\u767c\u5e03",
     "HeaderPhotoInfo": "Photo Info",
     "HeaderPhotoInfo": "Photo Info",
     "TabShows": "\u7bc0\u76ee",
     "TabShows": "\u7bc0\u76ee",
+    "HeaderInstall": "Install",
     "TabEpisodes": "\u55ae\u5143",
     "TabEpisodes": "\u55ae\u5143",
+    "LabelSelectVersionToInstall": "Select version to install:",
     "TabGenres": "\u985e\u578b",
     "TabGenres": "\u985e\u578b",
+    "LinkSupporterMembership": "Learn about the Supporter Membership",
     "TabPeople": "\u4eba\u7269",
     "TabPeople": "\u4eba\u7269",
+    "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.",
     "TabNetworks": "\u7db2\u7d61",
     "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",
     "HeaderUsers": "\u7528\u6236",
+    "HeaderReviews": "Reviews",
     "HeaderFilters": "\u904e\u6ffe\uff1a",
     "HeaderFilters": "\u904e\u6ffe\uff1a",
+    "HeaderDeveloperInfo": "Developer Info",
     "ButtonFilter": "\u904e\u6ffe",
     "ButtonFilter": "\u904e\u6ffe",
+    "HeaderRevisionHistory": "Revision History",
     "OptionFavorite": "\u6211\u7684\u6700\u611b",
     "OptionFavorite": "\u6211\u7684\u6700\u611b",
+    "ButtonViewWebsite": "View website",
     "OptionLikes": "\u559c\u6b61",
     "OptionLikes": "\u559c\u6b61",
+    "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.",
     "OptionDislikes": "\u4e0d\u559c\u6b61",
     "OptionDislikes": "\u4e0d\u559c\u6b61",
     "OptionActors": "\u6f14\u54e1",
     "OptionActors": "\u6f14\u54e1",
     "OptionGuestStars": "\u7279\u9080\u660e\u661f",
     "OptionGuestStars": "\u7279\u9080\u660e\u661f",

+ 0 - 14
MediaBrowser.ServerApplication/ApplicationHost.cs

@@ -305,20 +305,6 @@ namespace MediaBrowser.ServerApplication
         {
         {
             var saveConfig = false;
             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)
             if (ServerConfigurationManager.Configuration.TvFileOrganizationOptions != null)
             {
             {
                 ServerConfigurationManager.SaveConfiguration("autoorganize", new AutoOrganizeOptions { TvOptions = ServerConfigurationManager.Configuration.TvFileOrganizationOptions });
                 ServerConfigurationManager.SaveConfiguration("autoorganize", new AutoOrganizeOptions { TvOptions = ServerConfigurationManager.Configuration.TvFileOrganizationOptions });