Selaa lähdekoodia

update translations

Luke Pulverenti 11 vuotta sitten
vanhempi
sitoutus
2c6a9892f2
42 muutettua tiedostoa jossa 225 lisäystä ja 46 poistoa
  1. 7 4
      MediaBrowser.Api/Playback/BaseStreamingService.cs
  2. 1 1
      MediaBrowser.Api/Playback/Progressive/VideoService.cs
  3. 4 4
      MediaBrowser.Api/VideosService.cs
  4. 38 14
      MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs
  5. 2 0
      MediaBrowser.Common/Net/HttpRequestOptions.cs
  6. 1 1
      MediaBrowser.Controller/Entities/Video.cs
  7. 15 1
      MediaBrowser.Dlna/PlayTo/Device.cs
  8. 14 1
      MediaBrowser.Dlna/PlayTo/PlayToManager.cs
  9. 6 3
      MediaBrowser.Dlna/PlayTo/SsdpHttpClient.cs
  10. 1 1
      MediaBrowser.Dlna/Profiles/DefaultProfile.cs
  11. 1 1
      MediaBrowser.Providers/Manager/MetadataService.cs
  12. 20 4
      MediaBrowser.Providers/Manager/ProviderManager.cs
  13. 0 1
      MediaBrowser.Providers/Savers/ArtistXmlSaver.cs
  14. 1 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json
  15. 0 0
      MediaBrowser.Server.Implementations/Localization/JavaScript/he.json
  16. 1 1
      MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json
  17. 0 0
      MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json
  18. 1 0
      MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json
  19. 2 1
      MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs
  20. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/ar.json
  21. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/de.json
  22. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/el.json
  23. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/en_GB.json
  24. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/en_US.json
  25. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/es.json
  26. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/es_MX.json
  27. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/fr.json
  28. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/he.json
  29. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/it.json
  30. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/nb.json
  31. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/nl.json
  32. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json
  33. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json
  34. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/ru.json
  35. 100 2
      MediaBrowser.Server.Implementations/Localization/Server/server.json
  36. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/sv.json
  37. 0 0
      MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json
  38. 2 0
      MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
  39. 3 0
      MediaBrowser.WebDashboard/ApiClient.js
  40. 2 2
      Nuget/MediaBrowser.Common.Internal.nuspec
  41. 1 1
      Nuget/MediaBrowser.Common.nuspec
  42. 2 2
      Nuget/MediaBrowser.Server.Core.nuspec

+ 7 - 4
MediaBrowser.Api/Playback/BaseStreamingService.cs

@@ -319,7 +319,7 @@ namespace MediaBrowser.Api.Playback
         {
             var param = string.Empty;
 
-            var isVc1 = state.VideoStream != null && 
+            var isVc1 = state.VideoStream != null &&
                 string.Equals(state.VideoStream.Codec, "vc1", StringComparison.OrdinalIgnoreCase);
 
             var qualitySetting = GetQualitySetting();
@@ -438,9 +438,12 @@ namespace MediaBrowser.Api.Playback
             var channels = GetNumAudioChannelsParam(state.Request, state.AudioStream);
 
             // Boost volume to 200% when downsampling from 6ch to 2ch
-            if (channels.HasValue && channels.Value <= 2 && state.AudioStream.Channels.HasValue && state.AudioStream.Channels.Value > 5)
+            if (channels.HasValue && channels.Value <= 2)
             {
-                volParam = ",volume=2.000000";
+                if (state.AudioStream != null && state.AudioStream.Channels.HasValue && state.AudioStream.Channels.Value > 5)
+                {
+                    volParam = ",volume=2.000000";
+                }
             }
 
             if (state.Request.AudioSampleRate.HasValue)
@@ -1625,7 +1628,7 @@ namespace MediaBrowser.Api.Playback
 
             return SupportsAutomaticVideoStreamCopy;
         }
-        
+
         protected virtual bool SupportsAutomaticVideoStreamCopy
         {
             get

+ 1 - 1
MediaBrowser.Api/Playback/Progressive/VideoService.cs

@@ -186,7 +186,7 @@ namespace MediaBrowser.Api.Playback.Progressive
         private string GetAudioArguments(StreamState state)
         {
             // If the video doesn't have an audio stream, return a default.
-            if (state.AudioStream == null)
+            if (state.AudioStream == null && state.HasMediaStreams)
             {
                 return string.Empty;
             }

+ 4 - 4
MediaBrowser.Api/VideosService.cs

@@ -110,11 +110,11 @@ namespace MediaBrowser.Api
             {
                 link.PrimaryVersionId = null;
 
-                await link.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
+                await link.UpdateToRepository(ItemUpdateType.MetadataDownload, CancellationToken.None).ConfigureAwait(false);
             }
 
             video.LinkedAlternateVersions.Clear();
-            await video.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
+            await video.UpdateToRepository(ItemUpdateType.MetadataDownload, CancellationToken.None).ConfigureAwait(false);
         }
 
         public void Post(MergeVersions request)
@@ -182,7 +182,7 @@ namespace MediaBrowser.Api
             {
                 item.PrimaryVersionId = primaryVersion.Id;
 
-                await item.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
+                await item.UpdateToRepository(ItemUpdateType.MetadataDownload, CancellationToken.None).ConfigureAwait(false);
 
                 primaryVersion.LinkedAlternateVersions.Add(new LinkedChild
                 {
@@ -191,7 +191,7 @@ namespace MediaBrowser.Api
                 });
             }
 
-            await primaryVersion.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
+            await primaryVersion.UpdateToRepository(ItemUpdateType.MetadataDownload, CancellationToken.None).ConfigureAwait(false);
         }
     }
 }

+ 38 - 14
MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs

@@ -162,8 +162,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
         /// </summary>
         /// <param name="options">The options.</param>
         /// <returns>Task{HttpResponseInfo}.</returns>
-        /// <exception cref="HttpException">
-        /// </exception>
         public Task<HttpResponseInfo> GetResponse(HttpRequestOptions options)
         {
             return SendAsync(options, "GET");
@@ -174,8 +172,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
         /// </summary>
         /// <param name="options">The options.</param>
         /// <returns>Task{Stream}.</returns>
-        /// <exception cref="HttpException"></exception>
-        /// <exception cref="MediaBrowser.Model.Net.HttpException"></exception>
         public async Task<Stream> Get(HttpRequestOptions options)
         {
             var response = await GetResponse(options).ConfigureAwait(false);
@@ -322,9 +318,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
             }
             catch (WebException ex)
             {
-                _logger.ErrorException("Error getting response from " + options.Url, ex);
-
-                throw new HttpException(ex.Message, ex);
+                throw GetException(ex, options);
             }
             catch (Exception ex)
             {
@@ -341,6 +335,42 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
             }
         }
 
+        /// <summary>
+        /// Gets the exception.
+        /// </summary>
+        /// <param name="ex">The ex.</param>
+        /// <param name="options">The options.</param>
+        /// <returns>HttpException.</returns>
+        private HttpException GetException(WebException ex, HttpRequestOptions options)
+        {
+            _logger.ErrorException("Error getting response from " + options.Url, ex);
+
+            if (options.LogErrorResponseBody)
+            {
+                try
+                {
+                    using (var stream = ex.Response.GetResponseStream())
+                    {
+                        if (stream != null)
+                        {
+                            using (var reader = new StreamReader(stream))
+                            {
+                                var msg = reader.ReadToEnd();
+
+                                _logger.Error(msg);
+                            }
+                        }
+                    }
+                }
+                catch
+                {
+                    
+                }
+            }
+
+            return new HttpException(ex.Message, ex);
+        }
+
         private HttpResponseInfo GetResponseInfo(HttpWebResponse httpResponse, Stream content, long? contentLength)
         {
             return new HttpResponseInfo
@@ -384,10 +414,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
         /// <param name="options">The options.</param>
         /// <param name="postData">Params to add to the POST data.</param>
         /// <returns>stream on success, null on failure</returns>
-        /// <exception cref="HttpException">
-        /// </exception>
-        /// <exception cref="System.ArgumentNullException">postData</exception>
-        /// <exception cref="MediaBrowser.Model.Net.HttpException"></exception>
         public async Task<Stream> Post(HttpRequestOptions options, Dictionary<string, string> postData)
         {
             var strings = postData.Keys.Select(key => string.Format("{0}={1}", key, postData[key]));
@@ -426,8 +452,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
         /// <param name="options">The options.</param>
         /// <returns>Task{System.String}.</returns>
         /// <exception cref="System.ArgumentNullException">progress</exception>
-        /// <exception cref="HttpException"></exception>
-        /// <exception cref="MediaBrowser.Model.Net.HttpException"></exception>
         public async Task<string> GetTempFile(HttpRequestOptions options)
         {
             var response = await GetTempFileResponse(options).ConfigureAwait(false);
@@ -580,7 +604,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
 
             if (webException != null)
             {
-                return new HttpException(ex.Message, ex);
+                throw GetException(webException, options);
             }
 
             return ex;

+ 2 - 0
MediaBrowser.Common/Net/HttpRequestOptions.cs

@@ -73,6 +73,8 @@ namespace MediaBrowser.Common.Net
         public bool BufferContent { get; set; }
 
         public bool LogRequest { get; set; }
+
+        public bool LogErrorResponseBody { get; set; }
         
         public HttpRequestCachePolicy CachePolicy { get; set; }
 

+ 1 - 1
MediaBrowser.Controller/Entities/Video.cs

@@ -406,7 +406,7 @@ namespace MediaBrowser.Controller.Entities
                 item.Genres = Genres;
                 item.ProviderIds = ProviderIds;
 
-                await item.UpdateToRepository(ItemUpdateType.MetadataEdit, cancellationToken).ConfigureAwait(false);
+                await item.UpdateToRepository(ItemUpdateType.MetadataDownload, cancellationToken).ConfigureAwait(false);
             }
         }
 

+ 15 - 1
MediaBrowser.Dlna/PlayTo/Device.cs

@@ -575,7 +575,21 @@ namespace MediaBrowser.Dlna.PlayTo
                 return false;
             }
 
-            var e = track.Element(uPnpNamespaces.items) ?? track;
+            var trackString = (string) track;
+
+            XElement uPnpResponse;
+            
+            try
+            {
+                uPnpResponse = XElement.Parse(trackString);
+            }
+            catch
+            {
+                _logger.Error("Unable to parse xml {0}", trackString);
+                throw;
+            }
+
+            var e = uPnpResponse.Element(uPnpNamespaces.items);
 
             var uTrack = CreateUBaseObject(e);
 

+ 14 - 1
MediaBrowser.Dlna/PlayTo/PlayToManager.cs

@@ -59,7 +59,7 @@ namespace MediaBrowser.Dlna.PlayTo
         {
             _locations = new ConcurrentDictionary<string, DateTime>();
 
-            foreach (var network in NetworkInterface.GetAllNetworkInterfaces())
+            foreach (var network in GetNetworkInterfaces())
             {
                 _logger.Debug("Found interface: {0}. Type: {1}. Status: {2}", network.Name, network.NetworkInterfaceType, network.OperationalStatus);
 
@@ -97,6 +97,19 @@ namespace MediaBrowser.Dlna.PlayTo
             }
         }
 
+        private IEnumerable<NetworkInterface> GetNetworkInterfaces()
+        {
+            try
+            {
+                return NetworkInterface.GetAllNetworkInterfaces();
+            }
+            catch (Exception ex)
+            {
+                _logger.ErrorException("Error in GetAllNetworkInterfaces", ex);
+                return new List<NetworkInterface>();
+            }
+        }
+
         public void Stop()
         {
         }

+ 6 - 3
MediaBrowser.Dlna/PlayTo/SsdpHttpClient.cs

@@ -58,7 +58,8 @@ namespace MediaBrowser.Dlna.PlayTo
             {
                 Url = url,
                 UserAgent = USERAGENT,
-                LogRequest = _config.Configuration.DlnaOptions.EnableDebugLogging
+                LogRequest = _config.Configuration.DlnaOptions.EnableDebugLogging,
+                LogErrorResponseBody = true
             };
 
             options.RequestHeaders["HOST"] = ip + ":" + port.ToString(_usCulture);
@@ -102,7 +103,8 @@ namespace MediaBrowser.Dlna.PlayTo
             {
                 Url = url,
                 UserAgent = USERAGENT,
-                LogRequest = _config.Configuration.DlnaOptions.EnableDebugLogging
+                LogRequest = _config.Configuration.DlnaOptions.EnableDebugLogging,
+                LogErrorResponseBody = true
             };
 
             options.RequestHeaders["FriendlyName.DLNA.ORG"] = FriendlyName;
@@ -128,7 +130,8 @@ namespace MediaBrowser.Dlna.PlayTo
             {
                 Url = url,
                 UserAgent = USERAGENT,
-                LogRequest = _config.Configuration.DlnaOptions.EnableDebugLogging
+                LogRequest = _config.Configuration.DlnaOptions.EnableDebugLogging,
+                LogErrorResponseBody = true
             };
 
             options.RequestHeaders["SOAPAction"] = soapAction;

+ 1 - 1
MediaBrowser.Dlna/Profiles/DefaultProfile.cs

@@ -31,7 +31,7 @@ namespace MediaBrowser.Dlna.Profiles
 
                 new TranscodingProfile
                 {
-                    Container = "mp4",
+                    Container = "ts",
                     Type = DlnaProfileType.Video,
                     AudioCodec = "aac",
                     VideoCodec = "h264",

+ 1 - 1
MediaBrowser.Providers/Manager/MetadataService.cs

@@ -174,7 +174,7 @@ namespace MediaBrowser.Providers.Manager
             if (string.IsNullOrEmpty(item.Name) && !string.IsNullOrEmpty(item.Path))
             {
                 item.Name = Path.GetFileNameWithoutExtension(item.Path);
-                updateType = updateType | ItemUpdateType.MetadataEdit;
+                updateType = updateType | ItemUpdateType.MetadataDownload;
             }
 
             return updateType;

+ 20 - 4
MediaBrowser.Providers/Manager/ProviderManager.cs

@@ -613,14 +613,30 @@ namespace MediaBrowser.Providers.Manager
             {
                 if (!includeDisabled)
                 {
-                    if (!item.IsSaveLocalMetadataEnabled())
+                    if (options.DisabledMetadataSavers.Contains(saver.Name, StringComparer.OrdinalIgnoreCase))
                     {
                         return false;
                     }
-
-                    if (options.DisabledMetadataSavers.Contains(saver.Name, StringComparer.OrdinalIgnoreCase))
+                    
+                    if (!item.IsSaveLocalMetadataEnabled())
                     {
-                        return false;
+                        if (updateType >= ItemUpdateType.MetadataEdit)
+                        {
+                            var fileSaver = saver as IMetadataFileSaver;
+
+                            // Manual edit occurred
+                            // Even if save local is off, save locally anyway if the metadata file already exists
+                            if (fileSaver == null || !File.Exists(fileSaver.GetSavePath(item)))
+                            {
+                                return false;
+                            }
+                        }
+                        else
+                        {
+                            // Manual edit did not occur
+                            // Since local metadata saving is disabled, consider it disabled
+                            return false;
+                        }
                     }
                 }
 

+ 0 - 1
MediaBrowser.Providers/Savers/ArtistXmlSaver.cs

@@ -1,7 +1,6 @@
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
-using MediaBrowser.Model.Entities;
 using System.Collections.Generic;
 using System.IO;
 using System.Text;

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

@@ -1 +1 @@
-{"SettingsSaved":"Param\u00e8tres sauvegard\u00e9s.","AddUser":"Ajouter utilisateur","Users":"Utilisateurs","Delete":"Supprimer","Administrator":"Administrateur","Password":"Mot de passe","DeleteImage":"Supprimer Image","DeleteImageConfirmation":"\u00cates-vous s\u00fbr de vouloir supprimer l'image?","FileReadCancelled":"La lecture du fichier a \u00e9t\u00e9 annul\u00e9e.","FileNotFound":"Fichier non trouv\u00e9","FileReadError":"Un erreur est survenue pendant la lecture du fichier.","DeleteUser":"Supprimer utilisateur","DeleteUserConfirmation":"\u00cates-vous s\u00fbr de vouloir supprimer {0}?","PasswordResetHeader":"R\u00e9initialisation du mot de passe","PasswordResetComplete":"Le mot de passe a \u00e9t\u00e9 r\u00e9initialis\u00e9.","PasswordResetConfirmation":"\u00cates-vous s\u00fbr de vouloir r\u00e9initialiser le mot de passe?","PasswordSaved":"Mot de passe sauvegard\u00e9.","PasswordMatchError":"Le mot de passe et sa confirmation doivent correspondre.","OptionOff":"Off","OptionOn":"On","OptionRelease":"Lancement","OptionBeta":"Beta","OptionDev":"Dev (Instable)","UninstallPluginHeader":"D\u00e9sinstaller Plug-in","UninstallPluginConfirmation":"\u00cates-vous s\u00fbr de vouloir d\u00e9sinstaller {0}?","NoPluginConfigurationMessage":"Ce module d'extension n'a rien \u00e0 configurer.","NoPluginsInstalledMessage":"Vous n'avez aucun module d'extension install\u00e9.","BrowsePluginCatalogMessage":"Explorer notre catalogue de Plug-ins disponibles."}
+{"SettingsSaved":"Param\u00e8tres sauvegard\u00e9s.","AddUser":"Ajouter utilisateur","Users":"Utilisateurs","Delete":"Supprimer","Administrator":"Administrateur","Password":"Mot de passe","DeleteImage":"Supprimer Image","DeleteImageConfirmation":"\u00cates-vous s\u00fbr de vouloir supprimer l'image?","FileReadCancelled":"La lecture du fichier a \u00e9t\u00e9 annul\u00e9e.","FileNotFound":"Fichier non trouv\u00e9","FileReadError":"Un erreur est survenue pendant la lecture du fichier.","DeleteUser":"Supprimer utilisateur","DeleteUserConfirmation":"\u00cates-vous s\u00fbr de vouloir supprimer {0}?","PasswordResetHeader":"R\u00e9initialisation du mot de passe","PasswordResetComplete":"Le mot de passe a \u00e9t\u00e9 r\u00e9initialis\u00e9.","PasswordResetConfirmation":"\u00cates-vous s\u00fbr de vouloir r\u00e9initialiser le mot de passe?","PasswordSaved":"Mot de passe sauvegard\u00e9.","PasswordMatchError":"Le mot de passe et sa confirmation doivent correspondre.","OptionOff":"Off","OptionOn":"On","OptionRelease":"Version officielle","OptionBeta":"Beta","OptionDev":"Dev (Instable)","UninstallPluginHeader":"D\u00e9sinstaller Plug-in","UninstallPluginConfirmation":"\u00cates-vous s\u00fbr de vouloir d\u00e9sinstaller {0}?","NoPluginConfigurationMessage":"Ce module d'extension n'a rien \u00e0 configurer.","NoPluginsInstalledMessage":"Vous n'avez aucun module d'extension install\u00e9.","BrowsePluginCatalogMessage":"Explorer notre catalogue de Plug-ins disponibles."}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/JavaScript/he.json


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

@@ -1 +1 @@
-{"SettingsSaved":"Instellingen opgeslagen.","AddUser":"Gebruiker toevoegen","Users":"Gebruikers","Delete":"Verwijderen","Administrator":"Beheerder","Password":"Wachtwoord","DeleteImage":"Verwijder afbeelding","DeleteImageConfirmation":"Weet je zeker dat je deze afbeelding wilt verwijderen?","FileReadCancelled":"Bestand lezen is geannuleerd.","FileNotFound":"Bestand niet gevonden.","FileReadError":"Er is een fout opgetreden bij het lezen van het bestand.","DeleteUser":"Verwijder gebruiker","DeleteUserConfirmation":"Weet je zeker dat je {0} wilt verwijderen?","PasswordResetHeader":"Wachtwoord opnieuw instellen","PasswordResetComplete":"Het wachtwoord is opnieuw ingesteld.","PasswordResetConfirmation":"Weet je zeker dat je het wachtwoord opnieuw in wilt stellen?","PasswordSaved":"Wachtwoord opgeslagen.","PasswordMatchError":"Wachtwoord en wachtwoord bevestiging moeten hetzelfde zijn.","OptionOff":"Uit","OptionOn":"Aan","OptionRelease":"Offici\u00eble Release","OptionBeta":"Beta","OptionDev":"Alpha (Onstabiel)","UninstallPluginHeader":"Plug-in de\u00efnstalleren","UninstallPluginConfirmation":"Weet u zeker dat u {0} wilt de\u00efnstalleren?","NoPluginConfigurationMessage":"Deze plug-in heeft niets in te stellen","NoPluginsInstalledMessage":"U heeft geen plug-ins ge\u00efnstalleerd","BrowsePluginCatalogMessage":"Bekijk de Plug-in catalogus voor beschikbare plug-ins."}
+{"SettingsSaved":"Instellingen opgeslagen.","AddUser":"Gebruiker toevoegen","Users":"Gebruikers","Delete":"Verwijderen","Administrator":"Beheerder","Password":"Wachtwoord","DeleteImage":"Verwijder afbeelding","DeleteImageConfirmation":"Weet je zeker dat je deze afbeelding wilt verwijderen?","FileReadCancelled":"Bestand lezen is geannuleerd.","FileNotFound":"Bestand niet gevonden.","FileReadError":"Er is een fout opgetreden bij het lezen van het bestand.","DeleteUser":"Verwijder gebruiker","DeleteUserConfirmation":"Weet je zeker dat je {0} wilt verwijderen?","PasswordResetHeader":"Wachtwoord opnieuw instellen","PasswordResetComplete":"Het wachtwoord is opnieuw ingesteld.","PasswordResetConfirmation":"Weet je zeker dat je het wachtwoord opnieuw in wilt stellen?","PasswordSaved":"Wachtwoord opgeslagen.","PasswordMatchError":"Wachtwoord en wachtwoord bevestiging moeten hetzelfde zijn.","OptionOff":"Uit","OptionOn":"Aan","OptionRelease":"Offici\u00eble Release","OptionBeta":"Beta","OptionDev":"Dev (Onstabiel)","UninstallPluginHeader":"Plug-in de\u00efnstalleren","UninstallPluginConfirmation":"Weet u zeker dat u {0} wilt de\u00efnstalleren?","NoPluginConfigurationMessage":"Deze plug-in heeft niets in te stellen","NoPluginsInstalledMessage":"U heeft geen plug-ins ge\u00efnstalleerd","BrowsePluginCatalogMessage":"Bekijk de Plug-in catalogus voor beschikbare plug-ins."}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json


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

@@ -0,0 +1 @@
+{"SettingsSaved":"Inst\u00e4llningarna sparade.","AddUser":"Skapa anv\u00e4ndare","Users":"Anv\u00e4ndare","Delete":"Ta bort","Administrator":"Administrat\u00f6r","Password":"L\u00f6senord","DeleteImage":"Ta bort bild","DeleteImageConfirmation":"\u00c4r du s\u00e4ker p\u00e5 att du vill ta bort den h\u00e4r bilden?","FileReadCancelled":"Inl\u00e4sningen av filen har avbrutits.","FileNotFound":"Kan inte hitta filen.","FileReadError":"Ett fel intr\u00e4ffade vid inl\u00e4sningen av filen.","DeleteUser":"Ta bort anv\u00e4ndare","DeleteUserConfirmation":"\u00c4r du s\u00e4ker p\u00e5 att du vill ta bort  {0}?","PasswordResetHeader":"\u00c5terst\u00e4ll l\u00f6senordet","PasswordResetComplete":"L\u00f6senordet har \u00e5terst\u00e4llts.","PasswordResetConfirmation":"\u00c4r du s\u00e4ker p\u00e5 att du vill \u00e5terst\u00e4lla l\u00f6senordet?","PasswordSaved":"L\u00f6senordet har sparats.","PasswordMatchError":"L\u00f6senordet och bekr\u00e4ftelsen m\u00e5ste \u00f6verensst\u00e4mma.","OptionOff":"Av","OptionOn":"P\u00e5","OptionRelease":"Officiell version","OptionBeta":"Betaversion","OptionDev":"Utvecklarversion (instabil)","UninstallPluginHeader":"Avinstallera till\u00e4gg","UninstallPluginConfirmation":"\u00c4r du s\u00e4ker p\u00e5 att du vill avinstallera {0}?","NoPluginConfigurationMessage":"Detta till\u00e4gg har inga inst\u00e4llningar.","NoPluginsInstalledMessage":"Du har inte installerat n\u00e5gra till\u00e4gg.","BrowsePluginCatalogMessage":"Bes\u00f6k katalogen f\u00f6r att se tillg\u00e4ngliga till\u00e4gg."}

+ 2 - 1
MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs

@@ -348,7 +348,8 @@ namespace MediaBrowser.Server.Implementations.Localization
                 new LocalizatonOption{ Name="Portuguese (Portugal)", Value="pt-PT"},
                 new LocalizatonOption{ Name="Russian", Value="ru"},
                 new LocalizatonOption{ Name="Spanish", Value="es"},
-                new LocalizatonOption{ Name="Spanish (Mexico)", Value="es-MX"}
+                new LocalizatonOption{ Name="Spanish (Mexico)", Value="es-MX"},
+                new LocalizatonOption{ Name="Swedish", Value="sv"}
 
             }.OrderBy(i => i.Name);
         }

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/ar.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/de.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/el.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/en_GB.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/en_US.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/es.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/es_MX.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/fr.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/he.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/it.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/nb.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/nl.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/ru.json


+ 100 - 2
MediaBrowser.Server.Implementations/Localization/Server/server.json

@@ -124,9 +124,11 @@
 	"OptionTrackName": "Track Name",
 	"OptionCommunityRating": "Community Rating",
 	"OptionNameSort": "Name",
+	"OptionFolderSort": "Folders",
 	"OptionBudget": "Budget",
 	"OptionRevenue": "Revenue",
 	"OptionPoster": "Poster",
+	"OptionBackdrop": "Backdrop",
 	"OptionTimeline": "Timeline",
 	"OptionThumb": "Thumb",
 	"OptionBanner": "Banner",
@@ -212,7 +214,6 @@
 	"OptionIsHD": "HD",
 	"OptionIsSD": "SD",
 	"OptionMetascore": "Metascore",
-	"OptionImdbRating": "IMDb rating",
 	"ButtonSelect": "Select",
 	"ButtonGroupVersions": "Group Versions",
 	"PismoMessage": "Utilizing Pismo File Mount through a donated license.",
@@ -302,5 +303,102 @@
 	"ButtonDelete": "Delete",
 	"OptionRecordSeries": "Record Series",
 	"HeaderDetails": "Details",
-	"ButtonCancelRecording": "Cancel Recording"
+	"ButtonCancelRecording": "Cancel Recording",
+	"TitleLiveTV": "Live TV",
+	"LabelNumberOfGuideDays": "Number of days of guide data to download:",
+	"LabelNumberOfGuideDaysHelp": "Downloading more days worth of guide data provides the ability to schedule out further in advance and view more listings, but it will also take longer to download. Auto will choose based on the number of channels.",
+	"LabelActiveService": "Active Service:",
+	"LabelActiveServiceHelp": "Multiple tv plugins can be installed but only one can be active at a time.",
+	"OptionAutomatic": "Auto",
+	"LiveTvPluginRequired": "A Live TV service provider plugin is required in order to continue.",
+	"LiveTvPluginRequiredHelp": "Please install one of our available plugins, such as Next Pvr or ServerWmc.",
+	"HeaderCustomizeOptionsPerMediaType": "Customize options per media type",
+	"OptionDownloadThumbImage": "Thumb",
+	"OptionDownloadMenuImage": "Menu",
+	"OptionDownloadLogoImage": "Logo",
+	"OptionDownloadBoxImage": "Box",
+	"OptionDownloadDiscImage": "Disc",
+	"OptionDownloadBannerImage": "Banner",
+	"OptionDownloadBackImage": "Back",
+	"OptionDownloadArtImage": "Art",
+	"OptionDownloadPrimaryImage": "Primary",
+	"HeaderFetchImages": "Fetch Images:",
+	"HeaderImageSettings": "Image Settings",
+	"LabelMaxBackdropsPerItem": "Maximum number of backdrops per item:",
+	"LabelMaxScreenshotsPerItem": "Maximum number of screenshots per item:",
+	"LabelMinBackdropDownloadWidth": "Minimum backdrop download width:",
+	"LabelMinScreenshotDownloadWidth": "Minimum screenshot download width:",
+	"ButtonAddScheduledTaskTrigger": "Add Task Trigger",
+	"HeaderAddScheduledTaskTrigger": "Add Task Trigger",
+	"ButtonAdd": "Add",
+	"LabelTriggerType": "Trigger Type:",
+	"OptionDaily": "Daily",
+	"OptionWeekly": "Weekly",
+	"OptionOnInterval": "On an interval",
+	"OptionOnAppStartup": "On application startup",
+	"OptionAfterSystemEvent": "After a system event",
+	"LabelDay": "Day:",
+	"LabelTime": "Time:",
+	"LabelEvent": "Event:",
+	"OptionWakeFromSleep": "Wake from sleep",
+	"LabelEveryXMinutes": "Every:",
+	"HeaderTvTuners": "Tuners",
+	"HeaderGallery": "Gallery",
+	"HeaderLatestGames": "Latest Games",
+	"HeaderRecentlyPlayedGames": "Recently Played Games",
+	"TabGameSystems": "Game Systems",
+	"TitleMediaLibrary": "Media Library",
+	"TabFolders": "Folders",
+	"TabPathSubstitution": "Path Substitution",
+	"LabelSeasonZeroDisplayName": "Season 0 display name:",
+	"LabelEnableRealtimeMonitor": "Enable real time monitoring",
+	"LabelEnableRealtimeMonitorHelp": "Changes will be processed immediately, on supported file systems.",
+	"ButtonScanLibrary": "Scan Library",
+	"HeaderNumberOfPlayers": "Players:",
+	"OptionAnyNumberOfPlayers": "Any",
+	"Option1Player": "1+",
+	"Option2Player": "2+",
+	"Option3Player": "3+",
+	"Option4Player": "4+",
+	"HeaderMediaFolders": "Media Folders",
+	"HeaderThemeVideos": "Theme Videos",
+	"HeaderThemeSongs": "Theme Songs",
+	"HeaderScenes": "Scenes",
+	"HeaderAwardsAndReviews": "Awards and Reviews",
+	"HeaderSoundtracks": "Soundtracks",
+	"HeaderMusicVideos": "Music Videos",
+	"HeaderSpecialFeatures": "Special Features",
+	"HeaderCastCrew": "Cast & Crew",
+	"HeaderAdditionalParts": "Additional Parts",
+	"ButtonSplitVersionsApart": "Split Versions Apart",
+	"ButtonPlayTrailer": "Trailer",
+	"LabelMissing": "Missing",
+	"LabelOffline": "Offline",
+	"PathSubstitutionHelp": "Path substitutions are used for mapping a path on the server to a path that clients are able to access. By allowing clients direct access to media on the server they may be able to play them directly over the network and avoid using server resources to stream and transcode them.",
+	"HeaderFrom": "From",
+	"HeaderTo": "To",
+	"LabelFrom": "From:",
+	"LabelFromHelp": "Example: D:\\Movies (on the server)",
+	"LabelTo": "To:",
+	"LabelToHelp": "Example: \\\\MyServer\\Movies (a path clients can access)",
+	"ButtonAddPathSubstitution": "Add Substitution",
+	"OptionSpecialEpisode": "Specials",
+	"OptionMissingEpisode": "Missing Episodes",
+	"OptionUnairedEpisode": "Unaired Episodes",
+	"OptionEpisodeSortName": "Episode Sort Name",
+	"OptionSeriesSortName": "Series Name",
+	"OptionTvdbRating": "Tvdb Rating",
+	"HeaderTranscodingQualityPreference": "Transcoding Quality Preference:",
+	"OptionAutomaticTranscodingHelp": "The server will decide quality and speed",
+	"OptionHighSpeedTranscodingHelp": "Lower quality, but faster encoding",
+	"OptionHighQualityTranscodingHelp": "Higher quality, but slower encoding",
+	"OptionMaxQualityTranscodingHelp": "Best quality with slower encoding and high CPU usage",
+	"OptionHighSpeedTranscoding": "Higher speed",
+	"OptionHighQualityTranscoding": "Higher quality",
+	"OptionMaxQualityTranscoding": "Max quality",
+	"OptionEnableDebugTranscodingLogging": "Enable debug transcoding logging",
+	"OptionEnableDebugTranscodingLoggingHelp": "This will create very large log files and is only recommended as needed for troubleshooting purposes.",
+	"OptionEnableDebugTranscodingLogging": "Enable debug transcoding logging",
+	"OptionUpscaling": "Allow clients to request upscaled video",
+	"OptionUpscalingHelp": "In some cases this will result in improved video quality but will increase CPU usage."
 }

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/sv.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json


+ 2 - 0
MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj

@@ -315,6 +315,8 @@
     <EmbeddedResource Include="Localization\Server\nb.json" />
     <EmbeddedResource Include="Localization\JavaScript\el.json" />
     <EmbeddedResource Include="Localization\Server\en_GB.json" />
+    <EmbeddedResource Include="Localization\JavaScript\sv.json" />
+    <EmbeddedResource Include="Localization\Server\sv.json" />
     <None Include="packages.config" />
   </ItemGroup>
   <ItemGroup>

+ 3 - 0
MediaBrowser.WebDashboard/ApiClient.js

@@ -223,6 +223,9 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
             if (!userId) {
                 throw new Error("null userId");
             }
+            if (!itemId) {
+                throw new Error("null itemId");
+            }
 
             var url = self.getUrl("Users/" + userId + "/Items/" + itemId);
 

+ 2 - 2
Nuget/MediaBrowser.Common.Internal.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
     <metadata>
         <id>MediaBrowser.Common.Internal</id>
-        <version>3.0.348</version>
+        <version>3.0.349</version>
         <title>MediaBrowser.Common.Internal</title>
         <authors>Luke</authors>
         <owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
         <description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
         <copyright>Copyright © Media Browser 2013</copyright>
         <dependencies>
-            <dependency id="MediaBrowser.Common" version="3.0.348" />
+            <dependency id="MediaBrowser.Common" version="3.0.349" />
             <dependency id="NLog" version="2.1.0" />
             <dependency id="SimpleInjector" version="2.4.1" />
             <dependency id="sharpcompress" version="0.10.2" />

+ 1 - 1
Nuget/MediaBrowser.Common.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
     <metadata>
         <id>MediaBrowser.Common</id>
-        <version>3.0.348</version>
+        <version>3.0.349</version>
         <title>MediaBrowser.Common</title>
         <authors>Media Browser Team</authors>
         <owners>ebr,Luke,scottisafool</owners>

+ 2 - 2
Nuget/MediaBrowser.Server.Core.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
     <metadata>
         <id>MediaBrowser.Server.Core</id>
-        <version>3.0.348</version>
+        <version>3.0.349</version>
         <title>Media Browser.Server.Core</title>
         <authors>Media Browser Team</authors>
         <owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
         <description>Contains core components required to build plugins for Media Browser Server.</description>
         <copyright>Copyright © Media Browser 2013</copyright>
         <dependencies>
-            <dependency id="MediaBrowser.Common" version="3.0.348" />
+            <dependency id="MediaBrowser.Common" version="3.0.349" />
         </dependencies>
     </metadata>
     <files>

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä