aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Implementations')
-rw-r--r--Emby.Server.Implementations/ApplicationHost.cs40
-rw-r--r--Emby.Server.Implementations/Localization/Core/fr.json4
-rw-r--r--Emby.Server.Implementations/Localization/Core/pt.json97
3 files changed, 125 insertions, 16 deletions
diff --git a/Emby.Server.Implementations/ApplicationHost.cs b/Emby.Server.Implementations/ApplicationHost.cs
index c5ac27ed48..a179c1b150 100644
--- a/Emby.Server.Implementations/ApplicationHost.cs
+++ b/Emby.Server.Implementations/ApplicationHost.cs
@@ -103,14 +103,11 @@ using MediaBrowser.Providers.Subtitles;
using MediaBrowser.Providers.TV.TheTVDB;
using MediaBrowser.WebDashboard.Api;
using MediaBrowser.XbmcMetadata.Providers;
-using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Extensions;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
-using Microsoft.OpenApi.Models;
using OperatingSystem = MediaBrowser.Common.System.OperatingSystem;
namespace Emby.Server.Implementations
@@ -1480,7 +1477,7 @@ namespace Emby.Server.Implementations
/// </summary>
/// <param name="address">The IPv6 address.</param>
/// <returns>The IPv6 address without the scope id.</returns>
- private string RemoveScopeId(string address)
+ private ReadOnlySpan<char> RemoveScopeId(ReadOnlySpan<char> address)
{
var index = address.IndexOf('%');
if (index == -1)
@@ -1488,33 +1485,50 @@ namespace Emby.Server.Implementations
return address;
}
- return address.Substring(0, index);
+ return address.Slice(0, index);
}
+ /// <inheritdoc />
public string GetLocalApiUrl(IPAddress ipAddress)
{
if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6)
{
var str = RemoveScopeId(ipAddress.ToString());
+ Span<char> span = new char[str.Length + 2];
+ span[0] = '[';
+ str.CopyTo(span.Slice(1));
+ span[^1] = ']';
- return GetLocalApiUrl("[" + str + "]");
+ return GetLocalApiUrl(span);
}
return GetLocalApiUrl(ipAddress.ToString());
}
- public string GetLocalApiUrl(string host)
+ /// <inheritdoc />
+ public string GetLocalApiUrl(ReadOnlySpan<char> host)
{
+ var url = new StringBuilder(64);
if (EnableHttps)
{
- return string.Format("https://{0}:{1}",
- host,
- HttpsPort.ToString(CultureInfo.InvariantCulture));
+ url.Append("https://");
+ }
+ else
+ {
+ url.Append("http://");
+ }
+
+ url.Append(host)
+ .Append(':')
+ .Append(HttpPort);
+
+ string baseUrl = ServerConfigurationManager.Configuration.BaseUrl;
+ if (baseUrl.Length != 0)
+ {
+ url.Append('/').Append(baseUrl);
}
- return string.Format("http://{0}:{1}",
- host,
- HttpPort.ToString(CultureInfo.InvariantCulture));
+ return url.ToString();
}
public Task<List<IPAddress>> GetLocalIpAddresses(CancellationToken cancellationToken)
diff --git a/Emby.Server.Implementations/Localization/Core/fr.json b/Emby.Server.Implementations/Localization/Core/fr.json
index 9805992be9..e1dce82ffe 100644
--- a/Emby.Server.Implementations/Localization/Core/fr.json
+++ b/Emby.Server.Implementations/Localization/Core/fr.json
@@ -19,10 +19,10 @@
"HeaderCameraUploads": "Photos transférées",
"HeaderContinueWatching": "Continuer à regarder",
"HeaderFavoriteAlbums": "Albums favoris",
- "HeaderFavoriteArtists": "Artistes favoris",
+ "HeaderFavoriteArtists": "Artistes préférés",
"HeaderFavoriteEpisodes": "Épisodes favoris",
"HeaderFavoriteShows": "Séries favorites",
- "HeaderFavoriteSongs": "Chansons favorites",
+ "HeaderFavoriteSongs": "Chansons préférées",
"HeaderLiveTV": "TV en direct",
"HeaderNextUp": "À suivre",
"HeaderRecordingGroups": "Groupes d'enregistrements",
diff --git a/Emby.Server.Implementations/Localization/Core/pt.json b/Emby.Server.Implementations/Localization/Core/pt.json
index 0967ef424b..ef8d988c87 100644
--- a/Emby.Server.Implementations/Localization/Core/pt.json
+++ b/Emby.Server.Implementations/Localization/Core/pt.json
@@ -1 +1,96 @@
-{}
+{
+ "HeaderLiveTV": "TV ao Vivo",
+ "Collections": "Colecções",
+ "Books": "Livros",
+ "Artists": "Artistas",
+ "Albums": "Álbuns",
+ "HeaderNextUp": "A Seguir",
+ "HeaderFavoriteSongs": "Músicas Favoritas",
+ "HeaderFavoriteArtists": "Artistas Favoritos",
+ "HeaderFavoriteAlbums": "Álbuns Favoritos",
+ "HeaderFavoriteEpisodes": "Episódios Favoritos",
+ "HeaderFavoriteShows": "Séries Favoritas",
+ "HeaderContinueWatching": "Continuar a Ver",
+ "HeaderAlbumArtists": "Artistas do Álbum",
+ "Genres": "Géneros",
+ "Folders": "Pastas",
+ "Favorites": "Favoritos",
+ "Channels": "Canais",
+ "UserDownloadingItemWithValues": "{0} está a transferir {1}",
+ "VersionNumber": "Versão {0}",
+ "ValueHasBeenAddedToLibrary": "{0} foi adicionado à sua biblioteca multimédia",
+ "UserStoppedPlayingItemWithValues": "{0} terminou a reprodução de {1} em {2}",
+ "UserStartedPlayingItemWithValues": "{0} está a reproduzir {1} em {2}",
+ "UserPolicyUpdatedWithName": "A política do utilizador {0} foi alterada",
+ "UserPasswordChangedWithName": "A palavra-passe do utilizador {0} foi alterada",
+ "UserOnlineFromDevice": "{0} ligou-se a partir de {1}",
+ "UserOfflineFromDevice": "{0} desligou-se a partir de {1}",
+ "UserLockedOutWithName": "Utilizador {0} bloqueado",
+ "UserDeletedWithName": "Utilizador {0} removido",
+ "UserCreatedWithName": "Utilizador {0} criado",
+ "User": "Utilizador",
+ "TvShows": "Programas",
+ "System": "Sistema",
+ "SubtitlesDownloadedForItem": "Legendas transferidas para {0}",
+ "SubtitleDownloadFailureFromForItem": "Falha na transferência de legendas de {0} para {1}",
+ "StartupEmbyServerIsLoading": "O servidor Jellyfin está a iniciar. Tente novamente dentro de momentos.",
+ "ServerNameNeedsToBeRestarted": "{0} necessita ser reiniciado",
+ "ScheduledTaskStartedWithName": "{0} iniciou",
+ "ScheduledTaskFailedWithName": "{0} falhou",
+ "ProviderValue": "Fornecedor: {0}",
+ "PluginUpdatedWithName": "{0} foi actualizado",
+ "PluginUninstalledWithName": "{0} foi desinstalado",
+ "PluginInstalledWithName": "{0} foi instalado",
+ "Plugin": "Extensão",
+ "NotificationOptionVideoPlaybackStopped": "Reprodução de vídeo parada",
+ "NotificationOptionVideoPlayback": "Reprodução de vídeo iniciada",
+ "NotificationOptionUserLockedOut": "Utilizador bloqueado",
+ "NotificationOptionTaskFailed": "Falha em tarefa agendada",
+ "NotificationOptionServerRestartRequired": "É necessário reiniciar o servidor",
+ "NotificationOptionPluginUpdateInstalled": "Extensão actualizada",
+ "NotificationOptionPluginUninstalled": "Extensão desinstalada",
+ "NotificationOptionPluginInstalled": "Extensão instalada",
+ "NotificationOptionPluginError": "Falha na extensão",
+ "NotificationOptionNewLibraryContent": "Novo conteúdo adicionado",
+ "NotificationOptionInstallationFailed": "Falha de instalação",
+ "NotificationOptionCameraImageUploaded": "Imagem da câmara enviada",
+ "NotificationOptionAudioPlaybackStopped": "Reprodução Parada",
+ "NotificationOptionAudioPlayback": "Reprodução Iniciada",
+ "NotificationOptionApplicationUpdateInstalled": "A actualização da aplicação foi instalada",
+ "NotificationOptionApplicationUpdateAvailable": "Uma actualização da aplicação está disponível",
+ "NewVersionIsAvailable": "Uma nova versão do servidor Jellyfin está disponível para transferência.",
+ "NameSeasonUnknown": "Temporada Desconhecida",
+ "NameSeasonNumber": "Temporada {0}",
+ "NameInstallFailed": "Falha na instalação de {0}",
+ "MusicVideos": "Videoclips",
+ "Music": "Música",
+ "MixedContent": "Conteúdo Misto",
+ "MessageServerConfigurationUpdated": "A configuração do servidor foi actualizada",
+ "MessageNamedServerConfigurationUpdatedWithValue": "Configurações do servidor na secção {0} foram atualizadas",
+ "MessageApplicationUpdatedTo": "O servidor Jellyfin foi actualizado para a versão {0}",
+ "MessageApplicationUpdated": "O servidor Jellyfin foi actualizado",
+ "Latest": "Mais Recente",
+ "LabelRunningTimeValue": "Duração: {0}",
+ "LabelIpAddressValue": "Endereço IP: {0}",
+ "ItemRemovedWithName": "{0} foi removido da biblioteca",
+ "ItemAddedWithName": "{0} foi adicionado à biblioteca",
+ "Inherit": "Herdar",
+ "HomeVideos": "Vídeos Caseiros",
+ "HeaderRecordingGroups": "Grupos de Gravação",
+ "ValueSpecialEpisodeName": "Especial - {0}",
+ "Sync": "Sincronização",
+ "Songs": "Músicas",
+ "Shows": "Séries",
+ "Playlists": "Listas de Reprodução",
+ "Photos": "Fotografias",
+ "Movies": "Filmes",
+ "HeaderCameraUploads": "Envios a partir da câmara",
+ "FailedLoginAttemptWithUserName": "Tentativa de ligação a partir de {0} falhou",
+ "DeviceOnlineWithName": "{0} ligou-se",
+ "DeviceOfflineWithName": "{0} desligou-se",
+ "ChapterNameValue": "Capítulo {0}",
+ "CameraImageUploadedFrom": "Uma nova imagem de câmara foi enviada a partir de {0}",
+ "AuthenticationSucceededWithUserName": "{0} autenticado com sucesso",
+ "Application": "Aplicação",
+ "AppDeviceValues": "Aplicação {0}, Dispositivo: {1}"
+}