';
html += '';
+ html += '';
html += '';
html += '';
html += '';
@@ -30,6 +31,7 @@ define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', '
headerCastButton = skinHeader.querySelector('.headerCastButton');
headerAudioPlayerButton = skinHeader.querySelector('.headerAudioPlayerButton');
headerSearchButton = skinHeader.querySelector('.headerSearchButton');
+ headerSyncButton = skinHeader.querySelector('.headerSyncButton');
lazyLoadViewMenuBarImages();
bindMenuEvents();
@@ -84,9 +86,16 @@ define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', '
if (!layoutManager.tv) {
headerCastButton.classList.remove('hide');
}
+
+ var policy = user.Policy ? user.Policy : user.localUser.Policy;
+
+ if (headerSyncButton && policy && policy.SyncPlayAccess !== 'None') {
+ headerSyncButton.classList.remove('hide');
+ }
} else {
headerHomeButton.classList.add('hide');
headerCastButton.classList.add('hide');
+ headerSyncButton.classList.add('hide');
if (headerSearchButton) {
headerSearchButton.classList.add('hide');
@@ -147,6 +156,7 @@ define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', '
}
headerAudioPlayerButton.addEventListener('click', showAudioPlayer);
+ headerSyncButton.addEventListener('click', onSyncButtonClicked);
if (layoutManager.mobile) {
initHeadRoom(skinHeader);
@@ -177,6 +187,31 @@ define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', '
});
}
+ function onSyncButtonClicked() {
+ var btn = this;
+ groupSelectionMenu.show(btn);
+ }
+
+ function onSyncPlayEnabled(event, enabled) {
+ var icon = headerSyncButton.querySelector('span');
+ icon.classList.remove('sync', 'sync_disabled', 'sync_problem');
+ if (enabled) {
+ icon.classList.add('sync');
+ } else {
+ icon.classList.add('sync_disabled');
+ }
+ }
+
+ function onSyncPlaySyncing(event, is_syncing, syncMethod) {
+ var icon = headerSyncButton.querySelector('span');
+ icon.classList.remove('sync', 'sync_disabled', 'sync_problem');
+ if (is_syncing) {
+ icon.classList.add('sync_problem');
+ } else {
+ icon.classList.add('sync');
+ }
+ }
+
function getItemHref(item, context) {
return appRouter.getRouteUrl(item, {
context: context
@@ -799,6 +834,7 @@ define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', '
var headerCastButton;
var headerSearchButton;
var headerAudioPlayerButton;
+ var headerSyncButton;
var enableLibraryNavDrawer = layoutManager.desktop;
var skinHeader = document.querySelector('.skinHeader');
var requiresUserRefresh = true;
@@ -931,6 +967,8 @@ define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', '
updateUserInHeader();
});
events.on(playbackManager, 'playerchange', updateCastIcon);
+ events.on(syncPlayManager, 'enabled', onSyncPlayEnabled);
+ events.on(syncPlayManager, 'syncing', onSyncPlaySyncing);
loadNavDrawer();
return LibraryMenu;
});
diff --git a/src/scripts/serverNotifications.js b/src/scripts/serverNotifications.js
index e60f98475b..2553c284f0 100644
--- a/src/scripts/serverNotifications.js
+++ b/src/scripts/serverNotifications.js
@@ -1,4 +1,4 @@
-define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focusManager', 'appRouter'], function (connectionManager, playbackManager, events, inputManager, focusManager, appRouter) {
+define(['connectionManager', 'playbackManager', 'syncPlayManager', 'events', 'inputManager', 'focusManager', 'appRouter'], function (connectionManager, playbackManager, syncPlayManager, events, inputManager, focusManager, appRouter) {
'use strict';
var serverNotifications = {};
@@ -187,6 +187,10 @@ define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focus
events.trigger(serverNotifications, 'UserDataChanged', [apiClient, msg.Data.UserDataList[i]]);
}
}
+ } else if (msg.MessageType === 'SyncPlayCommand') {
+ syncPlayManager.processCommand(msg.Data, apiClient);
+ } else if (msg.MessageType === 'SyncPlayGroupUpdate') {
+ syncPlayManager.processGroupUpdate(msg.Data, apiClient);
} else {
events.trigger(serverNotifications, msg.MessageType, [apiClient, msg.Data]);
}
diff --git a/src/scripts/settings/userSettings.js b/src/scripts/settings/userSettings.js
index f922621526..06c5fa40a6 100644
--- a/src/scripts/settings/userSettings.js
+++ b/src/scripts/settings/userSettings.js
@@ -107,7 +107,7 @@ import events from 'events';
}
val = this.get('enableThemeSongs', false);
- return val !== 'false';
+ return val === 'true';
}
export function enableThemeVideos(val) {
@@ -116,7 +116,7 @@ import events from 'events';
}
val = this.get('enableThemeVideos', false);
- return val !== 'false';
+ return val === 'true';
}
export function enableFastFadein(val) {
@@ -137,6 +137,15 @@ import events from 'events';
return val !== 'false';
}
+ export function detailsBanner(val) {
+ if (val !== undefined) {
+ return this.set('detailsBanner', val.toString(), false);
+ }
+
+ val = this.get('detailsBanner', false);
+ return val !== 'false';
+ }
+
export function language(val) {
if (val !== undefined) {
return this.set('language', val.toString(), false);
diff --git a/src/scripts/site.js b/src/scripts/site.js
index b717539d5b..1eae51ed16 100644
--- a/src/scripts/site.js
+++ b/src/scripts/site.js
@@ -314,6 +314,13 @@ var AppInfo = {};
return obj;
}
+ function returnDefault(obj) {
+ if (obj.default === null) {
+ throw new Error('Object has no default!');
+ }
+ return obj.default;
+ }
+
function getBowerPath() {
return 'libraries';
}
@@ -484,6 +491,7 @@ var AppInfo = {};
'components/htmlAudioPlayer/plugin',
'components/htmlVideoPlayer/plugin',
'components/photoPlayer/plugin',
+ 'components/bookPlayer/plugin',
'components/youtubeplayer/plugin',
'components/backdropScreensaver/plugin',
'components/logoScreensaver/plugin'
@@ -554,6 +562,7 @@ var AppInfo = {};
require(['components/playback/volumeosd']);
}
+ /* eslint-disable-next-line compat/compat */
if (navigator.mediaSession || window.NativeShell) {
require(['mediaSession']);
}
@@ -670,6 +679,7 @@ var AppInfo = {};
'fetch',
'flvjs',
'jstree',
+ 'epubjs',
'jQuery',
'hlsjs',
'howler',
@@ -817,6 +827,10 @@ var AppInfo = {};
define('playbackSettings', [componentsPath + '/playbackSettings/playbackSettings'], returnFirstDependency);
define('homescreenSettings', [componentsPath + '/homeScreenSettings/homeScreenSettings'], returnFirstDependency);
define('playbackManager', [componentsPath + '/playback/playbackmanager'], getPlaybackManager);
+ define('timeSyncManager', [componentsPath + '/syncplay/timeSyncManager'], returnDefault);
+ define('groupSelectionMenu', [componentsPath + '/syncplay/groupSelectionMenu'], returnFirstDependency);
+ define('syncPlayManager', [componentsPath + '/syncplay/syncPlayManager'], returnDefault);
+ define('playbackPermissionManager', [componentsPath + '/syncplay/playbackPermissionManager'], returnDefault);
define('layoutManager', [componentsPath + '/layoutManager', 'apphost'], getLayoutManager);
define('homeSections', [componentsPath + '/homesections/homesections'], returnFirstDependency);
define('playMenu', [componentsPath + '/playmenu'], returnFirstDependency);
diff --git a/src/strings/cs.json b/src/strings/cs.json
index d5527faa76..8b631caf5a 100644
--- a/src/strings/cs.json
+++ b/src/strings/cs.json
@@ -1540,8 +1540,8 @@
"CopyStreamURLError": "Při kopírování URL došlo k chybě.",
"LabelVideoResolution": "Rozlišení videa:",
"LabelStreamType": "Typ streamu:",
- "EnableFastImageFadeInHelp": "Povolte rychlejší animaci pro načtené obrázky",
- "EnableFastImageFadeIn": "Rychlé zmizení obrazu",
+ "EnableFastImageFadeInHelp": "Zobrazí plakáty a další obrázky s rychlejší animací přechodu po dokončení načítání.",
+ "EnableFastImageFadeIn": "Rychlé animace přechodů obrazu",
"LabelPlayerDimensions": "Zobrazené rozlišení:",
"LabelDroppedFrames": "Vynechané snímky:",
"LabelCorruptedFrames": "Poškozené snímky:",
@@ -1601,5 +1601,37 @@
"LabelRequireHttps": "Vyžadovat HTTPS",
"TabDVR": "Nahrávání",
"HeaderDVR": "Nahrávání",
- "SaveChanges": "Uložit změny"
+ "SaveChanges": "Uložit změny",
+ "LabelSyncPlayPlaybackDiff": "Rozdíl v době přehrávání:",
+ "SyncPlayAccessHelp": "Určuje úroveň přístupu k synchronizaci přehrávání, kterou tento uživatel bude mít. Tato funkce umožňuje synchronizovat přehrávání s dalšími uživateli.",
+ "MessageSyncPlayErrorMedia": "Zapnutí synchronizace přehrávání se nezdařilo. Chyba média.",
+ "MessageSyncPlayErrorMissingSession": "Zapnutí synchronizace přehrávání se nezdařilo. Nebyla nalezena relace.",
+ "MessageSyncPlayErrorNoActivePlayer": "Nebyl nalezen žádný aktivní přehrávač. Synchronizace přehrávání byla vypnuta.",
+ "MessageSyncPlayErrorAccessingGroups": "Při načítání seznamu skupin došlo k chybě.",
+ "MessageSyncPlayLibraryAccessDenied": "Přístup k tomuto obsahu je omezen.",
+ "MessageSyncPlayJoinGroupDenied": "K použití synchronizace přehrávání je vyžadováno povolení.",
+ "MessageSyncPlayCreateGroupDenied": "K vytvoření skupiny je vyžadováno povolení.",
+ "MessageSyncPlayGroupDoesNotExist": "Připojení ke skupině se nezdařilo, protože skupina neexistuje.",
+ "MessageSyncPlayPlaybackPermissionRequired": "K přehrávání je vyžadováno povolení.",
+ "MessageSyncPlayNoGroupsAvailable": "Neexistují žádné skupiny. Začněte něco přehrávat.",
+ "MessageSyncPlayGroupWait": "Přehrávání uživatele {0} se načítá…",
+ "MessageSyncPlayUserLeft": "Uživatel {0} opustil skupinu.",
+ "MessageSyncPlayUserJoined": "Uživatel {0} se připojil do skupiny.",
+ "MessageSyncPlayDisabled": "Synchronizace přehrávání zakázána.",
+ "MessageSyncPlayEnabled": "Synchronizace přehrávání povolena.",
+ "LabelSyncPlayAccess": "Přístup k funkci synchronizace přehrávání",
+ "LabelSyncPlayAccessNone": "Zakázáno pro tohoto uživatele",
+ "LabelSyncPlayAccessJoinGroups": "Povolit uživateli připojovat se do skupin",
+ "LabelSyncPlayAccessCreateAndJoinGroups": "Povolit uživateli vytvářet a připojovat se do skupin",
+ "LabelSyncPlayLeaveGroupDescription": "Zakázat synchronizaci přehrávání",
+ "LabelSyncPlayLeaveGroup": "Opustit skupinu",
+ "LabelSyncPlayNewGroupDescription": "Vytvořit skupinu",
+ "LabelSyncPlayNewGroup": "Nová skupina",
+ "LabelSyncPlaySyncMethod": "Způsob synchronizace:",
+ "MillisecondsUnit": "ms",
+ "LabelSyncPlayTimeOffset": "Časový rozdíl mezi serverem:",
+ "HeaderSyncPlayEnabled": "Synchronizace přehrávání povolena",
+ "HeaderSyncPlaySelectGroup": "Připojit ke skupině",
+ "EnableDetailsBannerHelp": "Zobrazí obrázek ve vrchní části detailu položky.",
+ "EnableDetailsBanner": "Obrázek detailu"
}
diff --git a/src/strings/de.json b/src/strings/de.json
index 1ca5e91102..4e9934e9cc 100644
--- a/src/strings/de.json
+++ b/src/strings/de.json
@@ -1478,8 +1478,8 @@
"MessageConfirmAppExit": "Wirklich verlassen?",
"LabelVideoResolution": "Videoauflösung:",
"LabelStreamType": "Streamtyp:",
- "EnableFastImageFadeInHelp": "Aktiviere schnellere Einblendeanimation für geladene Bilder",
- "EnableFastImageFadeIn": "Schnelle Bildeinblendung",
+ "EnableFastImageFadeInHelp": "Zeige Poster und andere Bilder mit einer schnelleren Einblendeanimation, wenn diese fertig geladen sind.",
+ "EnableFastImageFadeIn": "Schnelle Bildeinblendungsanimationen",
"LabelPlayerDimensions": "Playerabmessungen:",
"LabelDroppedFrames": "Verlorene Frames:",
"LabelCorruptedFrames": "Fehlerhafte Frames:",
@@ -1539,5 +1539,37 @@
"LabelEnableHttps": "Aktiviere HTTPS",
"HeaderServerAddressSettings": "Server-Adresseinstellungen",
"HeaderRemoteAccessSettings": "Fernzugriffs-Einstellungen",
- "HeaderHttpsSettings": "HTTPS-Einstellungen"
+ "HeaderHttpsSettings": "HTTPS-Einstellungen",
+ "SyncPlayAccessHelp": "Wähle die Berechtigungsstufe, die dieser Benutzer auf das SyncPlay-Feature hat. SyncPlay ermöglicht die Synchronisierung der Wiedergabe mit anderen Geräten.",
+ "MessageSyncPlayErrorMedia": "SyncPlay konnte nicht aktiviert werden! Medienfehler.",
+ "MessageSyncPlayErrorMissingSession": "SyncPlay konnte nicht aktiviert werden! Fehlende Sitzung.",
+ "MessageSyncPlayErrorNoActivePlayer": "Keine aktive Wiedergabe gefunden. SyncPlay wurde deaktiviert.",
+ "MessageSyncPlayErrorAccessingGroups": "Beim Zugriff auf die Gruppen ist ein Fehler aufgetreten.",
+ "MessageSyncPlayLibraryAccessDenied": "Der Zugang zu diesem Inhalt ist beschränkt.",
+ "MessageSyncPlayJoinGroupDenied": "Eine Berechtigung ist erforderlich um SyncPlay zu benutzen.",
+ "MessageSyncPlayCreateGroupDenied": "Zum Erstellen einer Gruppe ist eine Genehmigung erforderlich.",
+ "MessageSyncPlayGroupDoesNotExist": "Konnte der Gruppe nicht beitreten, da sie nicht existiert.",
+ "MessageSyncPlayPlaybackPermissionRequired": "Wiedergabegenehmigung erforderlich.",
+ "MessageSyncPlayNoGroupsAvailable": "Keine Gruppen verfügbar. Fange an, etwas abzuspielen.",
+ "MessageSyncPlayGroupWait": "{0} ist am laden...",
+ "MessageSyncPlayUserLeft": "{0} hat die Gruppe verlassen.",
+ "MessageSyncPlayUserJoined": "{0} ist der Gruppe beigetreten.",
+ "MessageSyncPlayDisabled": "SyncPlay deaktiviert.",
+ "MessageSyncPlayEnabled": "SyncPlay aktiviert.",
+ "LabelSyncPlayAccess": "SyncPlay-Zugriff",
+ "LabelSyncPlayAccessNone": "Deaktiviert für diesen Benutzer",
+ "LabelSyncPlayAccessJoinGroups": "Erlaube dem Benutzer, Gruppen beizutreten",
+ "LabelSyncPlayAccessCreateAndJoinGroups": "Erlaube dem Benutzer, Gruppen zu erstellen und beizutreten",
+ "LabelSyncPlayLeaveGroupDescription": "Deaktiviere SyncPlay",
+ "LabelSyncPlayLeaveGroup": "Gruppe verlassen",
+ "LabelSyncPlayNewGroupDescription": "Erstelle eine neue Gruppe",
+ "LabelSyncPlayNewGroup": "Neue Gruppe",
+ "LabelSyncPlaySyncMethod": "Sync-Methode:",
+ "LabelSyncPlayPlaybackDiff": "Zeitversatz bei der Wiedergabe:",
+ "MillisecondsUnit": "ms",
+ "LabelSyncPlayTimeOffset": "Zeitversatz mit dem Server:",
+ "HeaderSyncPlayEnabled": "SyncPlay aktiviert",
+ "HeaderSyncPlaySelectGroup": "Tritt einer Gruppe bei",
+ "EnableDetailsBannerHelp": "Zeigt ein Bannerbild im oberen Bereich der Seite Item-Details.",
+ "EnableDetailsBanner": "Detailbanner"
}
diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json
index 723f4b1658..6d49f52c77 100644
--- a/src/strings/en-gb.json
+++ b/src/strings/en-gb.json
@@ -572,7 +572,7 @@
"Repeat": "Repeat",
"RemoveFromPlaylist": "Remove from playlist",
"RemoveFromCollection": "Remove from collection",
- "RememberMe": "Remember me",
+ "RememberMe": "Remember Me",
"ReleaseDate": "Release date",
"RefreshMetadata": "Refresh metadata",
"RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Jellyfin Server dashboard.",
diff --git a/src/strings/en-us.json b/src/strings/en-us.json
index 8ee4695533..f26ba16c85 100644
--- a/src/strings/en-us.json
+++ b/src/strings/en-us.json
@@ -239,6 +239,8 @@
"EnableThemeSongsHelp": "Play theme songs in the background while browsing the library.",
"EnableThemeVideos": "Theme videos",
"EnableThemeVideosHelp": "Play theme videos in the background while browsing the library.",
+ "EnableDetailsBanner": "Details Banner",
+ "EnableDetailsBannerHelp": "Display a banner image at the top of the item details page.",
"Ended": "Ended",
"EndsAtValue": "Ends at {0}",
"Episode": "Episode",
@@ -495,6 +497,8 @@
"HeaderSubtitleProfile": "Subtitle Profile",
"HeaderSubtitleProfiles": "Subtitle Profiles",
"HeaderSubtitleProfilesHelp": "Subtitle profiles describe the subtitle formats supported by the device.",
+ "HeaderSyncPlaySelectGroup": "Join a group",
+ "HeaderSyncPlayEnabled": "SyncPlay enabled",
"HeaderSystemDlnaProfiles": "System Profiles",
"HeaderTags": "Tags",
"HeaderTaskTriggers": "Task Triggers",
@@ -822,8 +826,8 @@
"LabelSaveLocalMetadataHelp": "Saving artwork into media folders will put them in a place where they can be easily edited.",
"LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.",
"LabelScreensaver": "Screensaver:",
- "EnableFastImageFadeIn": "Fast image fade-in",
- "EnableFastImageFadeInHelp": "Enable faster fade-in animation for loaded images",
+ "EnableFastImageFadeIn": "Fast Image Fade Animations",
+ "EnableFastImageFadeInHelp": "Show posters and other images with a quicker fade animation when they finish loading.",
"LabelSeasonNumber": "Season number:",
"LabelSelectFolderGroups": "Automatically group content from the following folders into views such as Movies, Music and TV:",
"LabelSelectFolderGroupsHelp": "Folders that are unchecked will be displayed by themselves in their own view.",
@@ -863,6 +867,18 @@
"LabelSubtitlePlaybackMode": "Subtitle mode:",
"LabelSubtitles": "Subtitles",
"LabelSupportedMediaTypes": "Supported Media Types:",
+ "LabelSyncPlayTimeOffset": "Time offset with the server:",
+ "MillisecondsUnit": "ms",
+ "LabelSyncPlayPlaybackDiff": "Playback time difference:",
+ "LabelSyncPlaySyncMethod": "Sync method:",
+ "LabelSyncPlayNewGroup": "New group",
+ "LabelSyncPlayNewGroupDescription": "Create a new group",
+ "LabelSyncPlayLeaveGroup": "Leave group",
+ "LabelSyncPlayLeaveGroupDescription": "Disable SyncPlay",
+ "LabelSyncPlayAccessCreateAndJoinGroups": "Allow user to create and join groups",
+ "LabelSyncPlayAccessJoinGroups": "Allow user to join groups",
+ "LabelSyncPlayAccessNone": "Disabled for this user",
+ "LabelSyncPlayAccess": "SyncPlay access",
"LabelTVHomeScreen": "TV mode home screen:",
"LabelTag": "Tag:",
"LabelTagline": "Tagline:",
@@ -1025,6 +1041,21 @@
"MessageUnableToConnectToServer": "We're unable to connect to the selected server right now. Please ensure it is running and try again.",
"MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders.",
"MessageYouHaveVersionInstalled": "You currently have version {0} installed.",
+ "MessageSyncPlayEnabled": "SyncPlay enabled.",
+ "MessageSyncPlayDisabled": "SyncPlay disabled.",
+ "MessageSyncPlayUserJoined": "{0} has joined the group.",
+ "MessageSyncPlayUserLeft": "{0} has left the group.",
+ "MessageSyncPlayGroupWait": "{0} is buffering...",
+ "MessageSyncPlayNoGroupsAvailable": "No groups available. Start playing something first.",
+ "MessageSyncPlayPlaybackPermissionRequired": "Playback permission required.",
+ "MessageSyncPlayGroupDoesNotExist": "Failed to join group because it does not exist.",
+ "MessageSyncPlayCreateGroupDenied": "Permission required to create a group.",
+ "MessageSyncPlayJoinGroupDenied": "Permission required to use SyncPlay.",
+ "MessageSyncPlayLibraryAccessDenied": "Access to this content is restricted.",
+ "MessageSyncPlayErrorAccessingGroups": "An error occurred while accessing groups list.",
+ "MessageSyncPlayErrorNoActivePlayer": "No active player found. SyncPlay has been disabled.",
+ "MessageSyncPlayErrorMissingSession": "Failed to enable SyncPlay! Missing session.",
+ "MessageSyncPlayErrorMedia": "Failed to enable SyncPlay! Media error.",
"Metadata": "Metadata",
"MetadataManager": "Metadata Manager",
"MetadataSettingChangeHelp": "Changing metadata settings will affect new content that is added going forward. To refresh existing content, open the detail screen and click the refresh button, or perform bulk refreshes using the metadata manager.",
@@ -1293,7 +1324,7 @@
"RefreshQueued": "Refresh queued.",
"ReleaseDate": "Release date",
"ReleaseGroup": "Release Group",
- "RememberMe": "Remember me",
+ "RememberMe": "Remember Me",
"RemoveFromCollection": "Remove from collection",
"RemoveFromPlaylist": "Remove from playlist",
"Repeat": "Repeat",
@@ -1372,6 +1403,7 @@
"Suggestions": "Suggestions",
"Sunday": "Sunday",
"Sync": "Sync",
+ "SyncPlayAccessHelp": "Select the level of access this user has to the SyncPlay feature. SyncPlay enables to sync playback with other devices.",
"SystemDlnaProfilesHelp": "System profiles are read-only. Changes to a system profile will be saved to a new custom profile.",
"TV": "TV",
"TabAccess": "Access",
diff --git a/src/strings/es-mx.json b/src/strings/es-mx.json
index 140addc8f9..3a711a558e 100644
--- a/src/strings/es-mx.json
+++ b/src/strings/es-mx.json
@@ -32,7 +32,7 @@
"AnamorphicVideoNotSupported": "Video anamorfico no soportado",
"AnyLanguage": "Cualquier idioma",
"Anytime": "En cualquier momento",
- "AroundTime": "Alrededor de {0}",
+ "AroundTime": "Alrededor de",
"Art": "Arte",
"Artists": "Artistas",
"AsManyAsPossible": "Tantos como sea posible",
@@ -103,7 +103,7 @@
"ButtonRemove": "Remover",
"ButtonRename": "Renombrar",
"ButtonRepeat": "Repetir",
- "ButtonResetEasyPassword": "Reiniciar el código pin sencillo",
+ "ButtonResetEasyPassword": "Restablecer código PIN sencillo",
"ButtonResetPassword": "Restablecer contraseña",
"ButtonRestart": "Reiniciar",
"ButtonResume": "Continuar",
@@ -203,7 +203,7 @@
"EnableBackdrops": "Imágenes de fondo",
"EnableBackdropsHelp": "Muestra imágenes de fondo en el fondo de algunas páginas mientras se navega por la biblioteca.",
"EnableCinemaMode": "Modo cine",
- "EnableColorCodedBackgrounds": "Fondos de color codificados",
+ "EnableColorCodedBackgrounds": "Fondos de colores codificados",
"EnableDisplayMirroring": "Duplicado de pantalla",
"EnableExternalVideoPlayers": "Reproductores de video externos",
"EnableExternalVideoPlayersHelp": "Un menú de reproductor externo se mostrara cuando inicie la reproducción de un video.",
@@ -410,8 +410,8 @@
"HeaderRecordingOptions": "Opciones de grabación",
"HeaderRecordingPostProcessing": "Post procesado de las grabaciones",
"HeaderRemoteControl": "Control remoto",
- "HeaderRemoveMediaFolder": "Eliminar carpeta de medios",
- "HeaderRemoveMediaLocation": "Eliminar ubicación de medios",
+ "HeaderRemoveMediaFolder": "Remover carpeta de medios",
+ "HeaderRemoveMediaLocation": "Remover ubicación de medios",
"HeaderResponseProfile": "Perfil de respuesta",
"HeaderResponseProfileHelp": "Los perfiles de respuesta proporcionan un medio para personalizar la información enviada al dispositivo cuando se reproducen ciertos tipos de medios.",
"HeaderRestart": "Reiniciar",
@@ -697,7 +697,7 @@
"LabelNumberOfGuideDays": "Número de días de datos de la programación a descargar:",
"LabelNumberOfGuideDaysHelp": "Descargar más días de datos de programación permite programar con mayor anticipación y ver más listados, pero tomará más tiempo en descargar. Auto hará la selección basada en el número de canales.",
"LabelOptionalNetworkPath": "(Opcional) Carpeta de red compartida:",
- "LabelOptionalNetworkPathHelp": "Si esta carpeta es compartida en su red, proveer la ruta del recurso compartido de red puede permitir a las aplicaciones Jellyfin en otros dispositivos acceder a los archivos de medios directamente.",
+ "LabelOptionalNetworkPathHelp": "Si esta carpeta es compartida en su red, proveer la ruta del recurso compartido de red puede permitir a las aplicaciones Jellyfin en otros dispositivos acceder a los archivos de medios directamente. Por ejemplo, {0} o {1}.",
"LabelOriginalAspectRatio": "Relación de aspecto original:",
"LabelOriginalTitle": "Título original:",
"LabelOverview": "Resumen:",
@@ -878,7 +878,7 @@
"MessageConfirmDeleteTunerDevice": "¿Estás seguro de querer eliminar este dispositivo?",
"MessageConfirmProfileDeletion": "¿Estás seguro de querer eliminar este perfil?",
"MessageConfirmRecordingCancellation": "¿Cancelar grabación?",
- "MessageConfirmRemoveMediaLocation": "¿Estás seguro de querer eliminar esta ubicación?",
+ "MessageConfirmRemoveMediaLocation": "¿Estás seguro de querer remover esta ubicación?",
"MessageConfirmRestart": "¿Estás seguro de que deseas reiniciar el servidor Jellyfin?",
"MessageConfirmRevokeApiKey": "¿Estás seguro de querer revocar esta clave API? La conexión de la aplicación con el servidor Jellyfin será terminada abruptamente.",
"MessageConfirmShutdown": "¿Estás seguro de que deseas apagar el servidor?",
@@ -912,7 +912,7 @@
"MessagePluginInstallDisclaimer": "Los complementos desarrollados por miembros de la comunidad Jellyfin son una gran forma de mejorar tu experiencia con Jellyfin con características y beneficios adicionales. Antes de instalar, por favor, conoce el impacto que pueden ocasionar en tu servidor Jellyfin, tales como escaneo más largo de bibliotecas, procesamiento en segundo plano adicional y reducción de la estabilidad del sistema.",
"MessageReenableUser": "Ver abajo para volver a habilitar",
"MessageSettingsSaved": "Configuraciones guardadas.",
- "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Las siguientes ubicaciones de medios se eliminarán de tu biblioteca:",
+ "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Las siguientes ubicaciones de medios se removerán de tu biblioteca:",
"MessageUnableToConnectToServer": "No podemos conectarnos al servidor seleccionado en este momento. Por favor, asegúrate de que está funcionando e inténtalo de nuevo.",
"MessageUnsetContentHelp": "El contenido será mostrado como carpetas simples. Para mejores resultados utiliza el administrador de metadatos para establecer los tipos de contenido para las subcarpetas.",
"MessageYouHaveVersionInstalled": "Actualmente cuentas con la versión {0} instalada.",
@@ -1453,7 +1453,7 @@
"LabelTranscodingFramerate": "Velocidad de cuadros de la transcodificación:",
"LabelSize": "Tamaño:",
"SelectAdminUsername": "Por favor, selecciona un nombre de usuario para la cuenta de administrador.",
- "EnableFastImageFadeInHelp": "Habilita una animación más rápida de desvanecimiento para las imágenes cargadas",
+ "EnableFastImageFadeInHelp": "Habilita una animación más rápida de desvanecimiento para las imágenes cargadas.",
"LabelDroppedFrames": "Cuadros saltados:",
"CopyStreamURLError": "Hubo un error al copiar la URL.",
"ButtonSplit": "Dividir",
@@ -1484,7 +1484,7 @@
"MessageConfirmAppExit": "¿Deseas salir?",
"LabelVideoResolution": "Resolución de video:",
"LabelStreamType": "Tipo de transmisión:",
- "EnableFastImageFadeIn": "Desvanecimiento rápido de las imágenes",
+ "EnableFastImageFadeIn": "Desvanecimiento rápido de animaciones",
"LabelPlayerDimensions": "Dimensiones del reproductor:",
"LabelCorruptedFrames": "Cuadros corruptos:",
"HeaderNavigation": "Navegación",
@@ -1524,5 +1524,37 @@
"HeaderRemoteAccessSettings": "Opciones de acceso remoto",
"HeaderHttpsSettings": "Opciones HTTPS",
"HeaderDVR": "DVR",
- "ApiKeysCaption": "Lista de claves API actualmente habilitadas"
+ "ApiKeysCaption": "Lista de claves API actualmente habilitadas",
+ "SyncPlayAccessHelp": "Selecciona el nivel de acceso que este usuario tiene a la función SyncPlay. SyncPlay permite sincronizar la reproducción con otros dispositivos.",
+ "MessageSyncPlayErrorMedia": "¡Fallo al activar SyncPlay! Error en el archivo de medios.",
+ "MessageSyncPlayErrorMissingSession": "¡Fallo al activar SyncPlay! Falta la sesión.",
+ "MessageSyncPlayErrorNoActivePlayer": "No se ha encontrado ningún reproductor activo. SyncPlay ha sido desactivado.",
+ "MessageSyncPlayErrorAccessingGroups": "Se produjo un error al acceder a la lista de grupos.",
+ "MessageSyncPlayLibraryAccessDenied": "El acceso a este contenido está restringido.",
+ "MessageSyncPlayJoinGroupDenied": "Permiso requerido para usar SyncPlay.",
+ "MessageSyncPlayCreateGroupDenied": "Permiso requerido para crear un grupo.",
+ "MessageSyncPlayGroupDoesNotExist": "Fallo al unirse al grupo porque éste no existe.",
+ "MessageSyncPlayPlaybackPermissionRequired": "Permiso de reproducción requerido.",
+ "MessageSyncPlayNoGroupsAvailable": "No hay grupos disponibles. Empieza a reproducir algo primero.",
+ "MessageSyncPlayGroupWait": "{0} está cargando...",
+ "MessageSyncPlayUserLeft": "{0} abandonó el grupo.",
+ "MessageSyncPlayUserJoined": "{0} se ha unido al grupo.",
+ "MessageSyncPlayDisabled": "SyncPlay deshabilitado.",
+ "MessageSyncPlayEnabled": "SyncPlay habilitado.",
+ "LabelSyncPlayAccess": "Acceso a SyncPlay",
+ "LabelSyncPlayAccessNone": "Deshabilitado para este usuario",
+ "LabelSyncPlayAccessJoinGroups": "Permitir al usuario unirse a grupos",
+ "LabelSyncPlayAccessCreateAndJoinGroups": "Permitir al usuario crear y unirse a grupos",
+ "LabelSyncPlayLeaveGroupDescription": "Deshabilitar SyncPlay",
+ "LabelSyncPlayLeaveGroup": "Abandonar grupo",
+ "LabelSyncPlayNewGroupDescription": "Crear un nuevo grupo",
+ "LabelSyncPlayNewGroup": "Nuevo grupo",
+ "LabelSyncPlaySyncMethod": "Método de sincronización:",
+ "LabelSyncPlayPlaybackDiff": "Diferencia de tiempo de reproducción:",
+ "MillisecondsUnit": "ms",
+ "LabelSyncPlayTimeOffset": "Tiempo compensado respecto al servidor:",
+ "HeaderSyncPlayEnabled": "SyncPlay habilitado",
+ "HeaderSyncPlaySelectGroup": "Unirse a un grupo",
+ "EnableDetailsBannerHelp": "Mostrar una imagen banner en la parte superior de la página de detalles del elemento.",
+ "EnableDetailsBanner": "Banner de detalles"
}
diff --git a/src/strings/es.json b/src/strings/es.json
index 8020c71006..ab46562f94 100644
--- a/src/strings/es.json
+++ b/src/strings/es.json
@@ -1458,8 +1458,8 @@
"ButtonSplit": "Dividir",
"HeaderNavigation": "Navegación",
"MessageConfirmAppExit": "¿Quieres salir?",
- "EnableFastImageFadeInHelp": "Las imágenes que hayan terminado de cargarse mostrarán una pequeña animación",
- "EnableFastImageFadeIn": "Cargar las imágenes suavemente",
+ "EnableFastImageFadeInHelp": "Mostrar carteles y otras imágenes con difuminado rápido cuando termine la carga.",
+ "EnableFastImageFadeIn": "Difuminado rápido de imágenes",
"CopyStreamURLError": "Ha habido un error copiando la dirección.",
"AllowFfmpegThrottlingHelp": "Cuando una transcodificación o un remux se adelanta lo suficiente desde la posición de reproducción actual, pause el proceso para que consuma menos recursos. Esto es más útil cuando se reproduce de forma linear, sin saltar de posición de reproducción a menudo. Desactívelo si experimenta problemas de reproducción.",
"PlaybackErrorNoCompatibleStream": "Este contenido no es compatible con este dispositivo y no se puede reproducir: No se puede obtener del servidor en un formato compatible.",
@@ -1524,5 +1524,37 @@
"LabelEnableHttps": "Activar HTTPS",
"TabDVR": "DVR",
"SaveChanges": "Guardar cambios",
- "HeaderDVR": "DVR"
+ "HeaderDVR": "DVR",
+ "SyncPlayAccessHelp": "Selecciona los permisos de este usuario para utilizar SyncPlay. SyncPlay te permite sincroniza la reproducción entre varios dispositivos.",
+ "MessageSyncPlayErrorMedia": "¡No se pudo activar SyncPlay! Error de medio.",
+ "MessageSyncPlayErrorMissingSession": "¡No se pudo activar SyncPlay! Sesión desconectada.",
+ "MessageSyncPlayErrorNoActivePlayer": "No hay reproductor activo. SyncPlay ha sido desactivado.",
+ "MessageSyncPlayErrorAccessingGroups": "Ocurrió un error al acceder a la lista de grupos.",
+ "MessageSyncPlayLibraryAccessDenied": "Acceso restringido a este contenido.",
+ "MessageSyncPlayJoinGroupDenied": "Requiere permiso para usar SyncPlay.",
+ "MessageSyncPlayCreateGroupDenied": "Requiere permiso para crear un grupo.",
+ "MessageSyncPlayGroupDoesNotExist": "No se pudo unir al grupo porque no existe.",
+ "MessageSyncPlayPlaybackPermissionRequired": "Requiere permiso para reproducir.",
+ "MessageSyncPlayNoGroupsAvailable": "No hay grupos disponibles. Reproduce algo primero.",
+ "MessageSyncPlayGroupWait": "{0} se está cargando...",
+ "MessageSyncPlayUserLeft": "{0} abandonó el grupo.",
+ "MessageSyncPlayUserJoined": "{0} se ha unido al grupo.",
+ "MessageSyncPlayDisabled": "SyncPlay inactivo.",
+ "MessageSyncPlayEnabled": "SyncPlay activo.",
+ "LabelSyncPlayAccess": "Acceso a SyncPlay",
+ "LabelSyncPlayAccessNone": "Inactivo para este usuario",
+ "LabelSyncPlayAccessJoinGroups": "Permitir a usuarios unirse a grupos",
+ "LabelSyncPlayAccessCreateAndJoinGroups": "Permitir a usuarios crear y unirse a grupos",
+ "LabelSyncPlayLeaveGroupDescription": "Inhabilitar SyncPlay",
+ "LabelSyncPlayLeaveGroup": "Abandonar grupo",
+ "LabelSyncPlayNewGroupDescription": "Crear un nuevo grupo",
+ "LabelSyncPlayNewGroup": "Nuevo grupo",
+ "LabelSyncPlaySyncMethod": "Método de sincronización:",
+ "LabelSyncPlayPlaybackDiff": "Diferencia del tiempo de reproducción:",
+ "MillisecondsUnit": "ms",
+ "LabelSyncPlayTimeOffset": "Huso horario de el servidor:",
+ "HeaderSyncPlayEnabled": "Syncplay activo",
+ "HeaderSyncPlaySelectGroup": "Unirse a un grupo",
+ "EnableDetailsBannerHelp": "Mostrar imagen de banner en el tope de la página de detalles del elemento.",
+ "EnableDetailsBanner": "Barra de Detalles"
}
diff --git a/src/strings/es_419.json b/src/strings/es_419.json
new file mode 100644
index 0000000000..d15d630b7e
--- /dev/null
+++ b/src/strings/es_419.json
@@ -0,0 +1,42 @@
+{
+ "ValueSpecialEpisodeName": "Especial - {0}",
+ "Sync": "Sincronizar",
+ "Songs": "Canciones",
+ "Shows": "Programas",
+ "Playlists": "Listas de reproducción",
+ "Photos": "Fotos",
+ "Movies": "Películas",
+ "HeaderNextUp": "A continuación",
+ "HeaderLiveTV": "TV en vivo",
+ "HeaderFavoriteSongs": "Canciones favoritas",
+ "HeaderFavoriteShows": "Programas favoritos",
+ "HeaderFavoriteEpisodes": "Episodios favoritos",
+ "HeaderFavoriteArtists": "Artistas favoritos",
+ "HeaderFavoriteAlbums": "Álbumes favoritos",
+ "HeaderContinueWatching": "Continuar viendo",
+ "HeaderAlbumArtists": "Artistas del álbum",
+ "Genres": "Géneros",
+ "Folders": "Carpetas",
+ "Favorites": "Favoritos",
+ "Collections": "Colecciones",
+ "Channels": "Canales",
+ "Books": "Libros",
+ "Artists": "Artistas",
+ "Albums": "Álbumes",
+ "TabLatest": "Recientes",
+ "HeaderUser": "Usuario",
+ "AlbumArtist": "Artista del álbum",
+ "Album": "Álbum",
+ "Aired": "Transmitido",
+ "AirDate": "Fecha de emisión",
+ "AdditionalNotificationServices": "Explora el catálogo de complementos para instalar servicios de notificaciones adicionales.",
+ "AddedOnValue": "Agregado {0}",
+ "AddToPlaylist": "Agregar a lista de reproducción",
+ "AddToPlayQueue": "Agregar a la cola de reproducción",
+ "AddToCollection": "Agregar a colección",
+ "AddItemToCollectionHelp": "Agrega elementos a las colecciones buscándolos y utilizando sus menúes al hacer clic derecho o al tocarlos para agregarlos a una colección.",
+ "Add": "Agregar",
+ "Actor": "Actor",
+ "AccessRestrictedTryAgainLater": "El acceso está restringido actualmente. Por favor, inténtalo más tarde.",
+ "Absolute": "Absoluto"
+}
diff --git a/src/strings/fr.json b/src/strings/fr.json
index add033a3e6..01c8ae4394 100644
--- a/src/strings/fr.json
+++ b/src/strings/fr.json
@@ -31,7 +31,7 @@
"AlwaysPlaySubtitlesHelp": "Les sous-titres correspondant à la préférence linguistique seront chargés indépendamment de la langue de l'audio.",
"AnyLanguage": "N'importe quel langage",
"Anytime": "N'importe quand",
- "AroundTime": "Aux environs de {0}",
+ "AroundTime": "Aux environs de",
"Artists": "Artistes",
"AsManyAsPossible": "Autant que possible",
"Ascending": "Croissant",
@@ -274,7 +274,7 @@
"HeaderAddUser": "Ajouter un utilisateur",
"HeaderAdditionalParts": "Parties additionelles",
"HeaderAdmin": "Administrateur",
- "HeaderAlbumArtists": "Artistes de l'album",
+ "HeaderAlbumArtists": "Artistes",
"HeaderAlert": "Alerte",
"HeaderAllowMediaDeletionFrom": "Autoriser la suppression de médias à partir de",
"HeaderApiKey": "Clé API",
@@ -692,7 +692,7 @@
"LabelNumberOfGuideDays": "Nombre de jours de données du guide à télécharger :",
"LabelNumberOfGuideDaysHelp": "Télécharger plus de journées du guide permet de programmer des enregistrements plus longtemps à l'avance et de visualiser plus de contenus, mais prendra également plus de temps. Automatique permettra une sélection automatique basée sur le nombre de chaînes.",
"LabelOptionalNetworkPath": "(Optionnel) Dossier réseau partagé :",
- "LabelOptionalNetworkPathHelp": "Si le dossier est partagé sur votre réseau, donner accès au chemin du dossier réseau peut autoriser les applications Jellyfin sur d'autres appareils à avoir accès à ses fichiers directement.",
+ "LabelOptionalNetworkPathHelp": "Si le dossier est partagé sur votre réseau, donner le chemin d'accès au dossier réseau peut permettre aux applications Jellyfin sur d'autres appareils d'avoir accès à ses fichiers directement. Par exemple, {0} ou {1}.",
"LabelOriginalAspectRatio": "Ratio d'aspect original :",
"LabelOriginalTitle": "Titre original :",
"LabelOverview": "Synopsis :",
@@ -1448,7 +1448,7 @@
"FetchingData": "Récuperer des données suplémentaires",
"CopyStreamURLSuccess": "URL copiée avec succès.",
"CopyStreamURL": "Copier l'URL du flux",
- "LabelBaseUrlHelp": "Ajoute un sous-répertoire personnalisé à l'adresse URL du serveur. Par exemple: http://example.com/<baseurl>",
+ "LabelBaseUrlHelp": "Ajoute un sous-répertoire personnalisé à l'adresse URL du serveur. Par exemple : http://example.com/< ;baseurl> ;",
"HeaderFavoritePeople": "Personnes préférées",
"OptionRandom": "Aléatoire",
"ButtonSplit": "Séparer",
@@ -1458,7 +1458,7 @@
"MessageConfirmAppExit": "Voulez-vous quitter ?",
"LabelVideoResolution": "Résolution vidéo :",
"LabelStreamType": "Type de flux :",
- "EnableFastImageFadeInHelp": "Activer un fondu plus rapide pour l'animation des images chargées",
+ "EnableFastImageFadeInHelp": "Activer un fondu plus rapide pour l'animation des images chargées.",
"EnableFastImageFadeIn": "Fondu d'image rapide",
"LabelPlayerDimensions": "Dimension du lecteur :",
"LabelDroppedFrames": "Images perdues :",
@@ -1510,7 +1510,7 @@
"HeaderFavoritePlaylists": "Listes de lecture favorites",
"TabDVR": "DVR",
"LabelChromecastVersion": "Version de Chromecast",
- "LabelEnableHttpsHelp": "Autorise le serveur à écouter les requêtes HTTPS configurées. Un certificat valide doit être configuré pour permettre ce mode de fonctionnement.",
+ "LabelEnableHttpsHelp": "Autorise le serveur à écouter les requêtes HTTPS sur le port configurée. Un certificat valide doit être configuré pour permettre ce mode de fonctionnement.",
"LabelEnableHttps": "Activer HTTPS",
"HeaderServerAddressSettings": "Paramètres adresses serveur",
"HeaderRemoteAccessSettings": "Paramètres d'accès distant",
@@ -1521,5 +1521,37 @@
"LabelRequireHttpsHelp": "Si activé, le serveur va automatiquement rediriger toutes les requêtes en HTTP vers HTTPS. Cette option n'a aucun effet si le serveur n'écoute pas HTTPS.",
"LabelRequireHttps": "Nécessite HTTPS",
"LabelNightly": "De nuit",
- "LabelStable": "Stable"
+ "LabelStable": "Stable",
+ "EnableDetailsBanner": "Bannière des détails",
+ "EnableDetailsBannerHelp": "Affichez une image de bannière en haut de la page de détails de l'article.",
+ "HeaderSyncPlaySelectGroup": "Rejoindre un groupe",
+ "LabelSyncPlayAccessCreateAndJoinGroups": "Autoriser l'utilisateur à créer un ou rejoindre un groupe",
+ "LabelSyncPlayLeaveGroupDescription": "Désactiver SyncPlay",
+ "LabelSyncPlayLeaveGroup": "Quitter le groupe",
+ "LabelSyncPlayNewGroupDescription": "Créer un nouveau groupe",
+ "LabelSyncPlayNewGroup": "Nouveau groupe",
+ "LabelSyncPlaySyncMethod": "Méthode de synchronisation :",
+ "LabelSyncPlayPlaybackDiff": "Décalage de la lecture :",
+ "MillisecondsUnit": "ms",
+ "LabelSyncPlayTimeOffset": "Décalage de temps avec le serveur :",
+ "HeaderSyncPlayEnabled": "SyncPlay activé",
+ "MessageSyncPlayLibraryAccessDenied": "L'accès à ce contenu est restreint.",
+ "MessageSyncPlayJoinGroupDenied": "Permission requise pour utiliser SyncPlay.",
+ "MessageSyncPlayCreateGroupDenied": "Permission requise pour créer un groupe.",
+ "MessageSyncPlayGroupDoesNotExist": "Impossible de rejoindre le groupe car il n'existe pas.",
+ "MessageSyncPlayPlaybackPermissionRequired": "Autorisation de lecture requise.",
+ "MessageSyncPlayNoGroupsAvailable": "Aucun groupe disponible. Commencez par lancer quelque chose.",
+ "MessageSyncPlayGroupWait": "{0} est en train de charger...",
+ "MessageSyncPlayUserLeft": "{0} a quitté le groupe.",
+ "MessageSyncPlayUserJoined": "{0} a rejoint le groupe.",
+ "MessageSyncPlayDisabled": "SyncPlay désactivé.",
+ "MessageSyncPlayEnabled": "SyncPlay activé.",
+ "LabelSyncPlayAccess": "Accès SyncPlay",
+ "LabelSyncPlayAccessNone": "Désactivé pour cet utilisateur",
+ "LabelSyncPlayAccessJoinGroups": "Autoriser l'utilisateur à rejoindre un groupe",
+ "SyncPlayAccessHelp": "Sélectionner le niveau d'accès de cet utilisateur pour la fonctionnalité SyncPlay. SyncPlay permet de synchroniser la lecture avec d'autres utilisateurs.",
+ "MessageSyncPlayErrorMedia": "Impossible d'activer SyncPlay ! Erreur média.",
+ "MessageSyncPlayErrorMissingSession": "Impossible d'activer SyncPlay ! Session manquante.",
+ "MessageSyncPlayErrorNoActivePlayer": "Aucun player actif trouvé. SyncPlay a été désactivé.",
+ "MessageSyncPlayErrorAccessingGroups": "Une erreur s'est produite pendant l'accès à la liste de groupes."
}
diff --git a/src/strings/hu.json b/src/strings/hu.json
index 6bd8bc82cd..6d6307285d 100644
--- a/src/strings/hu.json
+++ b/src/strings/hu.json
@@ -1393,7 +1393,7 @@
"ButtonSplit": "Szétvág",
"Absolute": "Abszolút",
"LabelSkipIfAudioTrackPresentHelp": "Vedd ki a pipát, ha minden videóhoz szeretnél feliratot az audio nyelvétől függetlenül.",
- "EnableFastImageFadeInHelp": "Gyorsabb előtűnés animáció a betöltött képekhez",
+ "EnableFastImageFadeInHelp": "Poszterek és más képek megjelenítése gyorsabb animációkkal.",
"EnableFastImageFadeIn": "Gyors kép-előtűnés",
"SubtitleOffset": "Felirat eltolása",
"SeriesDisplayOrderHelp": "Rakd sorba az epizódokat az adásba kerülésük dátuma, a DVD sorszám, vagy az abszolút számozás szerint.",
@@ -1524,5 +1524,37 @@
"HeaderHttpsSettings": "HTTPS Beállítások",
"TabDVR": "DVR",
"HeaderDVR": "DVR",
- "SaveChanges": "Változtatások mentése"
+ "SaveChanges": "Változtatások mentése",
+ "MessageSyncPlayGroupWait": "{0} bufferel...",
+ "MessageSyncPlayUserLeft": "{0} elhagyta a csoportot.",
+ "MessageSyncPlayUserJoined": "{0} csatlakozott a csoporthoz.",
+ "MessageSyncPlayDisabled": "SyncPlay letiltva.",
+ "MessageSyncPlayEnabled": "SyncPlay engedélyezve.",
+ "LabelSyncPlayAccess": "SyncPlay hozzáférés",
+ "LabelSyncPlayAccessCreateAndJoinGroups": "A felhasználó létrehozhat csoportokat és csatlakozhat hozzájuk",
+ "LabelSyncPlayLeaveGroupDescription": "SyncPlay letiltása",
+ "LabelSyncPlayLeaveGroup": "Csoport elhagyása",
+ "LabelSyncPlayNewGroupDescription": "Új csoport létrehozása",
+ "LabelSyncPlayNewGroup": "Új csoport",
+ "LabelSyncPlaySyncMethod": "Szinkronizálási mód:",
+ "MillisecondsUnit": "ms",
+ "HeaderSyncPlayEnabled": "SyncPlay engedélyezve",
+ "HeaderSyncPlaySelectGroup": "Csatlakozás csoporthoz",
+ "SyncPlayAccessHelp": "Válaszd ki, hogy ez a felhasználó milyen szinten férhet hozzá a SyncPlay funkcióhoz. A SyncPlay lehetőséget biztosít a lejátszások közötti szinkronizációra.",
+ "MessageSyncPlayErrorMedia": "Nem sikerült a SyncPlay engedélyezése! Média hiba.",
+ "MessageSyncPlayErrorMissingSession": "A SyncPlay lejátszása sikertelen! Hiányzó munkamenet.",
+ "MessageSyncPlayErrorNoActivePlayer": "Nem található aktív lejátszó. A SyncPlay letiltásra került.",
+ "MessageSyncPlayErrorAccessingGroups": "Hiba történt a csoportok listájának betöltésekor.",
+ "MessageSyncPlayLibraryAccessDenied": "A tartalomhoz való hozzáférés korlátozva van.",
+ "MessageSyncPlayJoinGroupDenied": "A SyncPlay használatához jogosultság szükséges.",
+ "MessageSyncPlayCreateGroupDenied": "Jogosultság szükséges a csoportok létrehozásához.",
+ "MessageSyncPlayGroupDoesNotExist": "Nem sikerült csatlakozni a csoporthoz, mivel az nem létezik.",
+ "MessageSyncPlayPlaybackPermissionRequired": "Lejátszási jogosultság szükséges.",
+ "MessageSyncPlayNoGroupsAvailable": "Nincsenek elérhető csoportok. Először kezdj el lejátszani valamit.",
+ "LabelSyncPlayAccessNone": "Letiltva ennél a felhasználónál",
+ "LabelSyncPlayAccessJoinGroups": "A felhasználó csoportokhoz való csatlakozásának engedélyezése",
+ "LabelSyncPlayPlaybackDiff": "Lejátszási időkülönbség:",
+ "LabelSyncPlayTimeOffset": "Időeltolás a szerverhez képest:",
+ "EnableDetailsBannerHelp": "Megjelenít egy banner képet a részletes információoldal tetején.",
+ "EnableDetailsBanner": "Banner a részletes oldalon"
}
diff --git a/src/strings/nl.json b/src/strings/nl.json
index 0b67a184d1..23a563a8f0 100644
--- a/src/strings/nl.json
+++ b/src/strings/nl.json
@@ -547,7 +547,7 @@
"LabelEmbedAlbumArtDidl": "Insluiten van albumhoezen in Didl",
"LabelEmbedAlbumArtDidlHelp": "Sommige apparaten prefereren deze methode voor het verkrijgen van albumhoezen. Anderen kunnen falen om af te spelen met deze optie ingeschakeld.",
"LabelEnableAutomaticPortMap": "Schakel automatisch poort vertalen in",
- "LabelEnableAutomaticPortMapHelp": "Poging om de publieke poort automatisch om te zetten naar een lokale poort via UPnP. Dit werkt niet op alle routers. De wijzigingen worden pas actief na een herstart van de server.",
+ "LabelEnableAutomaticPortMapHelp": "Publieke poort automatisch doorsturen naar een lokale poort via UPnP. Dit werkt niet op alle routers en netwerk configuraties. De wijzigingen worden pas actief na een herstart van de server.",
"LabelEnableBlastAliveMessages": "Alive berichten zenden",
"LabelEnableBlastAliveMessagesHelp": "Zet dit aan als de server niet betrouwbaar door andere UPnP-apparaten op uw netwerk wordt gedetecteerd.",
"LabelEnableDlnaClientDiscoveryInterval": "Interval voor het zoeken naar clients (seconden)",
@@ -666,7 +666,7 @@
"LabelNumberOfGuideDays": "Aantal dagen van de gids om te downloaden:",
"LabelNumberOfGuideDaysHelp": "Het downloaden van meer dagen van de gids gegevens biedt de mogelijkheid verder vooruit te plannen en een beter overzicht geven, maar het zal ook langer duren om te downloaden. Auto kiest op basis van het aantal kanalen.",
"LabelOptionalNetworkPath": "(Optioneel) Gedeelde netwerkmap:",
- "LabelOptionalNetworkPathHelp": "Als deze map wordt gedeeld op uw netwerk, kunnen middels het netwerkpad Jellyfin apps op andere apparaten rechtstreeks toegang tot mediabestanden krijgen.",
+ "LabelOptionalNetworkPathHelp": "Als deze map wordt gedeeld op uw netwerk, kunnen middels het netwerkpad Jellyfin apps op andere apparaten rechtstreeks toegang tot mediabestanden krijgen. Bijvoorbeeld {0} or {1}.",
"LabelOriginalAspectRatio": "Originele aspect ratio:",
"LabelOriginalTitle": "Orginele titel:",
"LabelOverview": "Overzicht:",
@@ -980,7 +980,7 @@
"OptionMissingEpisode": "Ontbrekende Afleveringen",
"OptionMonday": "Maandag",
"OptionNameSort": "Naam",
- "OptionNew": "Nieuw ...",
+ "OptionNew": "Nieuw…",
"OptionNone": "Geen",
"OptionOnAppStartup": "Op applicatie start",
"OptionOnInterval": "Op interval",
@@ -1406,14 +1406,14 @@
"LabelAudioCodec": "Audio codec:",
"LabelAudioChannels": "Audio kanalen:",
"LabelBitrate": "Bitrate:",
- "LabelBaseUrlHelp": "Hier kunt u een eigen subdirectory toevoegen om de server te bereiken doormiddel van een meer unieke URL.",
+ "LabelBaseUrlHelp": "Voegt een aangepaste submap toe aan de server-URL. Bijvoorbeeld: http://example.com/<baseurl>",
"LabelFolder": "Folder:",
"LabelLineup": "Lineup:",
"LabelPlayer": "Speler:",
"LabelPlayMethod": "Afspeel methode:",
"LabelPleaseRestart": "De wijzigingen zullen worden toegepast na het handmatig herladen van de web cliënt.",
"LabelStatus": "Status:",
- "LabelTagline": "Label lijn:",
+ "LabelTagline": "Label tekst:",
"LabelTranscodingContainer": "Container:",
"LabelTranscodePath": "Transcodeer pad:",
"LabelTranscodes": "Transcoderen:",
@@ -1471,8 +1471,8 @@
"Artist": "Artiest",
"AllowFfmpegThrottlingHelp": "Wanneer een transcode of remux ver genoeg voorloopt op de huidige afspeelpositie, pauzeer het proces, zodat het minder middelen verbruikt. Dit is vooral handig wanneer u kijkt zonder vaak te zoeken. Schakel dit uit als u afspeelproblemen ondervindt.",
"AllowFfmpegThrottling": "Throttle Transcodes",
- "EnableFastImageFadeInHelp": "Schakel snellere vervagings-animatie in voor ingeladen afbeeldingen",
- "EnableFastImageFadeIn": "Snelle afbeeldingsvervaging",
+ "EnableFastImageFadeInHelp": "Toon posters en andere afbeeldingen met een snellere fade-animatie wanneer ze klaar zijn met laden.",
+ "EnableFastImageFadeIn": "Fast Image Fade Animaties",
"LabelPlayerDimensions": "Afspeellengte:",
"LabelLibraryPageSizeHelp": "Kies het aantal artikelen dat wordt weergegeven op een bibliotheekpagina. Kies 0 om dit te verbergen.",
"LabelLibraryPageSize": "Bibliotheekpagina grootte:",
@@ -1514,5 +1514,53 @@
"SelectAdminUsername": "Selecteer een gebruikersnaam voor het beheerder account.",
"HeaderFavoritePlaylists": "Favoriete afspeellijsten",
"ButtonTogglePlaylist": "Afspeellijst",
- "ButtonToggleContextMenu": "Meer"
+ "ButtonToggleContextMenu": "Meer",
+ "LabelRequireHttpsHelp": "Indien aangevinkt, zal de server alle verzoeken via HTTP automatisch omleiden naar HTTPS. Dit heeft geen effect als de server niet luistert op HTTPS.",
+ "EnableDetailsBanner": "Details Banner",
+ "MessageSyncPlayNoGroupsAvailable": "Geen groepen beschikbaar. Begin eerst iets te spelen.",
+ "EnableDetailsBannerHelp": "Toon een bannerafbeelding bovenaan de pagina met itemdetails.",
+ "TabDVR": "DVR",
+ "SyncPlayAccessHelp": "Selecteer het toegangsniveau dat deze gebruiker heeft tot de SyncPlay-functie. SyncPlay maakt het mogelijk om het afspelen met andere gebruikers te synchroniseren.",
+ "Filter": "Filter",
+ "New": "Nieuw",
+ "SaveChanges": "Wijzigingen opslaan",
+ "MessageSyncPlayErrorMedia": "Kan SyncPlay niet inschakelen! Media fout.",
+ "MessageSyncPlayErrorMissingSession": "Kan SyncPlay niet inschakelen! Ontbrekende sessie.",
+ "MessageSyncPlayErrorNoActivePlayer": "Geen actieve speler gevonden. SyncPlay is uitgeschakeld.",
+ "MessageSyncPlayErrorAccessingGroups": "Er is een fout opgetreden bij het openen van de groepslijst.",
+ "MessageSyncPlayLibraryAccessDenied": "Toegang tot deze inhoud is beperkt.",
+ "MessageSyncPlayJoinGroupDenied": "Toestemming vereist om SyncPlay te gebruiken.",
+ "MessageSyncPlayCreateGroupDenied": "Toestemming vereist om een groep te maken.",
+ "MessageSyncPlayGroupDoesNotExist": "Kan niet deelnemen aan de groep omdat deze niet bestaat.",
+ "MessageSyncPlayPlaybackPermissionRequired": "Afspeelrechten vereist.",
+ "MessageSyncPlayGroupWait": "{0} is aan het bufferen...",
+ "MessageSyncPlayUserLeft": "{0} i heeft de groep verlaten.",
+ "MessageSyncPlayUserJoined": "{0} is lid geworden van de groep.",
+ "MessageSyncPlayDisabled": "SyncPlay uitgeschakeld.",
+ "MessageSyncPlayEnabled": "SyncPlay ingeschakeld.",
+ "LabelSyncPlayAccess": "SyncPlay toegang",
+ "LabelSyncPlayAccessNone": "Uitgeschakeld voor deze gebruiker",
+ "LabelSyncPlayAccessJoinGroups": "Sta de gebruiker toe om groepen te maken",
+ "LabelSyncPlayAccessCreateAndJoinGroups": "Sta de gebruiker toe om groepen te maken en eraan deel te nemen",
+ "LabelSyncPlayLeaveGroupDescription": "SyncPlay uitschakelen",
+ "LabelSyncPlayLeaveGroup": "Groep verlaten",
+ "LabelSyncPlayNewGroupDescription": "Maak een nieuwe groep",
+ "LabelSyncPlayNewGroup": "Nieuwe groep",
+ "LabelSyncPlaySyncMethod": "Sync methode:",
+ "LabelSyncPlayPlaybackDiff": "Verschil in afspeeltijd:",
+ "MillisecondsUnit": "ms",
+ "LabelSyncPlayTimeOffset": "Tijd offset met de server:",
+ "LabelRequireHttps": "HTTPS verplichten",
+ "LabelNightly": "Nightly",
+ "LabelStable": "Stabiel",
+ "LabelChromecastVersion": "Chromecast versie",
+ "LabelEnableHttpsHelp": "Hiermee kan de server luisteren op de geconfigureerde HTTPS-poort. Hiervoor moet ook een geldig certificaat worden geconfigureerd.",
+ "LabelEnableHttps": "HTTPS inschakelen",
+ "HeaderSyncPlayEnabled": "SyncPlay ingeschakeld",
+ "HeaderSyncPlaySelectGroup": "Word lid van een groep",
+ "HeaderServerAddressSettings": "Server adres instellingen",
+ "HeaderRemoteAccessSettings": "Externe toegang instellingen",
+ "HeaderHttpsSettings": "HTTPS instellingen",
+ "HeaderDVR": "DVR",
+ "ApiKeysCaption": "Lijst met de momenteel ingeschakelde API-sleutels"
}
diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json
index ff89d00307..e1e8acfc31 100644
--- a/src/strings/pt-br.json
+++ b/src/strings/pt-br.json
@@ -30,7 +30,7 @@
"AlwaysPlaySubtitlesHelp": "As legendas que combinarem com a preferência de idioma serão carregadas independente do idioma do áudio.",
"AnyLanguage": "Qualquer idioma",
"Anytime": "A qualquer momento",
- "AroundTime": "Aproximadamente {0}",
+ "AroundTime": "Aproximadamente",
"Art": "Arte",
"Artists": "Artistas",
"AsManyAsPossible": "Quantos forem possíveis",
@@ -1121,7 +1121,7 @@
"RefreshMetadata": "Atualizar metadados",
"RefreshQueued": "Atualização enfileirada.",
"ReleaseDate": "Data de lançamento",
- "RememberMe": "Lembre-me",
+ "RememberMe": "Lembrar-me",
"RemoveFromCollection": "Remover da coletânea",
"RemoveFromPlaylist": "Remover da lista de reprodução",
"Repeat": "Repetir",
@@ -1465,7 +1465,7 @@
"AskAdminToCreateLibrary": "Peça a um administrador para criar uma biblioteca.",
"AllowFfmpegThrottling": "Transcodes do Acelerador",
"PlaybackErrorNoCompatibleStream": "Este cliente não é compatível com a media e o servidor não está enviando um formato de mídia compatível.",
- "EnableFastImageFadeInHelp": "Habilitar animações rápidas de aparecimento para imagens carregadas",
+ "EnableFastImageFadeInHelp": "Mostrar pôsteres e outras imagens com uma animação mais rápida ao terminar de carregar.",
"LabelDroppedFrames": "Quadros caídos:",
"AllowFfmpegThrottlingHelp": "Quando uma transcodificação ou remux estiver suficientemente avançada da posição atual de reprodução, pause o processo para que consuma menos recursos. Isso é mais proveitoso para quando não há avanço ou retrocesso do vídeo com frequência. Desative se tiver problemas de reprodução.",
"PreferEmbeddedEpisodeInfosOverFileNames": "Preferir informações dos episódios incorporadas nos arquivos ao invés dos nomes",
@@ -1515,10 +1515,42 @@
"LabelNightly": "Nightly",
"LabelStable": "Estável",
"LabelChromecastVersion": "Versão do Chromecast",
- "LabelEnableHttpsHelp": "Habilita que o servidor escute na localização HTTPS configurada. Um certificado válido também deve ser configurado para que isso entre em vigor.",
+ "LabelEnableHttpsHelp": "Habilita que o servidor escute na porta HTTPS configurada. Um certificado válido também deve ser configurado para que isso entre em vigor.",
"LabelEnableHttps": "Habilitar HTTPS",
"HeaderServerAddressSettings": "Configurações da localização do servidor",
"HeaderRemoteAccessSettings": "Configurações de acesso remoto",
"HeaderHttpsSettings": "Configurações HTTPS",
- "HeaderDVR": "DVR"
+ "HeaderDVR": "DVR",
+ "LabelSyncPlayTimeOffset": "Diferença de tempo com o servidor:",
+ "SyncPlayAccessHelp": "Selecione o nível de acesso desse usuário aos recursos do SyncPlay. SyncPlay habilita a reprodução sincronizada com outros usuários.",
+ "MessageSyncPlayErrorMedia": "Falha ao ativar SyncPlay! Erro de mídia.",
+ "MessageSyncPlayErrorMissingSession": "Falha ao ativar SyncPlay! Sessão em falta.",
+ "MessageSyncPlayErrorNoActivePlayer": "Nenhum reprodutor ativo encontrado. SyncPlay foi desativado.",
+ "MessageSyncPlayErrorAccessingGroups": "Ocorreu um erro ao acessar a lista de grupos.",
+ "MessageSyncPlayLibraryAccessDenied": "O acesso a esse conteúdo é restrito.",
+ "MessageSyncPlayJoinGroupDenied": "Permissão necessária para usar SyncPlay.",
+ "MessageSyncPlayCreateGroupDenied": "Permissão necessária para criar um grupo.",
+ "MessageSyncPlayGroupDoesNotExist": "Falha ao participar de grupo pois o mesmo não existe.",
+ "MessageSyncPlayPlaybackPermissionRequired": "É necessária permissão de reprodução.",
+ "MessageSyncPlayNoGroupsAvailable": "Nenhum grupo disponível. Comece a reproduzir algo primeiro.",
+ "MessageSyncPlayGroupWait": "{0} está carregando...",
+ "MessageSyncPlayUserLeft": "{0} deixou o grupo.",
+ "MessageSyncPlayUserJoined": "{0} se juntou ao grupo.",
+ "MessageSyncPlayDisabled": "SyncPlay desativado.",
+ "MessageSyncPlayEnabled": "SyncPlay ativado.",
+ "LabelSyncPlayAccess": "Acesso ao SyncPlay",
+ "LabelSyncPlayAccessNone": "Desativado para esse usuário",
+ "LabelSyncPlayAccessJoinGroups": "Permitir que o usuário participe de grupos",
+ "LabelSyncPlayAccessCreateAndJoinGroups": "Permitir que o usuário crie e participe em grupos",
+ "LabelSyncPlayLeaveGroupDescription": "Desativar SyncPlay",
+ "LabelSyncPlayLeaveGroup": "Deixar grupo",
+ "LabelSyncPlayNewGroupDescription": "Criar novo grupo",
+ "LabelSyncPlayNewGroup": "Novo grupo",
+ "LabelSyncPlaySyncMethod": "Método de sincronização:",
+ "LabelSyncPlayPlaybackDiff": "Diferença no tempo de reprodução:",
+ "MillisecondsUnit": "ms",
+ "HeaderSyncPlayEnabled": "SyncPlay ativado",
+ "HeaderSyncPlaySelectGroup": "Entrar em um grupo",
+ "EnableDetailsBanner": "Banner de detalhes",
+ "EnableDetailsBannerHelp": "Exibe um banner na parte superior da página de detalhes do item."
}
diff --git a/src/strings/ro.json b/src/strings/ro.json
index 7aa2f26d3f..89aeda2ef2 100644
--- a/src/strings/ro.json
+++ b/src/strings/ro.json
@@ -1238,7 +1238,7 @@
"Repeat": "Repetă",
"RemoveFromPlaylist": "Scoateți din lista de redare",
"RemoveFromCollection": "Scoateți din colecție",
- "RememberMe": "Ține-mă minte",
+ "RememberMe": "Ține-mă Minte",
"ReleaseDate": "Data lansării",
"RefreshQueued": "Actualizare adăugată în coadă.",
"RefreshMetadata": "Actualizați metadatele",
@@ -1454,8 +1454,8 @@
"HeaderNavigation": "Navigare",
"MessageConfirmAppExit": "Vrei să ieși?",
"CopyStreamURLError": "A apărut o eroare la copierea adresei URL.",
- "EnableFastImageFadeInHelp": "Activați animația mai rapidă de tranziție pentru imaginile încărcate",
- "EnableFastImageFadeIn": "Tranziție a imaginii rapidă",
+ "EnableFastImageFadeInHelp": "Arătați postere și alte imagini cu o animație de tranziție rapidă când sunt deja încărcate.",
+ "EnableFastImageFadeIn": "Animație de Tranziție a Imaginii Rapidă",
"LabelVideoResolution": "Rezoluția video:",
"LabelStreamType": "Tipul streamului:",
"LabelPlayerDimensions": "Dimensiunile soft redare:",
@@ -1519,5 +1519,37 @@
"HeaderHttpsSettings": "Setări https",
"TabDVR": "DVR",
"SaveChanges": "Salvează modificările",
- "HeaderDVR": "DVR"
+ "HeaderDVR": "DVR",
+ "SyncPlayAccessHelp": "Selectați nivelul de acces pe care îl are acest utilizator la funcția SyncPlay. SyncPlay permite sincronizarea redării cu alte dispozitive.",
+ "MessageSyncPlayErrorMedia": "Eroare la activarea SyncPlay! Eroare media.",
+ "MessageSyncPlayErrorMissingSession": "Eroare la activarea SyncPlay! Sesiune lipsă.",
+ "MessageSyncPlayErrorNoActivePlayer": "Nu a fost găsit niciun soft de redare activ. SyncPlay a fost dezactivat.",
+ "MessageSyncPlayErrorAccessingGroups": "A apărut o eroare la accesarea listei de grupuri.",
+ "MessageSyncPlayLibraryAccessDenied": "Accesul la acest conținut este restricționat.",
+ "MessageSyncPlayJoinGroupDenied": "Permisiune necesară pentru a utiliza SyncPlay.",
+ "MessageSyncPlayCreateGroupDenied": "Permisiune necesară pentru crearea unui grup.",
+ "MessageSyncPlayGroupDoesNotExist": "Nu a reușit să se alăture grupului, deoarece nu există.",
+ "MessageSyncPlayPlaybackPermissionRequired": "Este necesară permisiunea de redare.",
+ "MessageSyncPlayNoGroupsAvailable": "Nu există grupuri disponibile. Începe să redai ceva mai întâi.",
+ "MessageSyncPlayGroupWait": "{0} se încarcă...",
+ "MessageSyncPlayUserLeft": "{0} a părăsit grupul.",
+ "MessageSyncPlayUserJoined": "{0} s-a alăturat grupului.",
+ "MessageSyncPlayDisabled": "SyncPlay dezactivat.",
+ "MessageSyncPlayEnabled": "SyncPlay activat.",
+ "LabelSyncPlayAccess": "Acces SyncPlay",
+ "LabelSyncPlayAccessNone": "Dezactivat pentru acest utilizator",
+ "LabelSyncPlayAccessJoinGroups": "Permiteți utilizatorului să se alăture grupurilor",
+ "LabelSyncPlayAccessCreateAndJoinGroups": "Permiteți utilizatorului să creeze și să se alăture grupurilor",
+ "LabelSyncPlayLeaveGroupDescription": "Dezactivează SyncPlay",
+ "LabelSyncPlayLeaveGroup": "Parăsește grup",
+ "LabelSyncPlayNewGroupDescription": "Crează un grup nou",
+ "LabelSyncPlayNewGroup": "Grup nou",
+ "LabelSyncPlaySyncMethod": "Metoda de sincronizare:",
+ "LabelSyncPlayPlaybackDiff": "Diferența de timp de redare:",
+ "MillisecondsUnit": "ms",
+ "LabelSyncPlayTimeOffset": "Decalare de timp cu serverul:",
+ "HeaderSyncPlayEnabled": "SyncPlay activat",
+ "HeaderSyncPlaySelectGroup": "Alăturați-vă unui grup",
+ "EnableDetailsBannerHelp": "Afișați o imagine de bandou în partea de sus a paginii cu detalii ale articolului.",
+ "EnableDetailsBanner": "Detalii Bandou"
}
diff --git a/src/strings/ru.json b/src/strings/ru.json
index d3a38d34d3..4a7e2aa8ab 100644
--- a/src/strings/ru.json
+++ b/src/strings/ru.json
@@ -1460,8 +1460,8 @@
"HeaderNavigation": "Навигация",
"LabelVideoResolution": "Разрешение видео:",
"LabelStreamType": "Тип потока:",
- "EnableFastImageFadeInHelp": "Включить быстрое появление анимации для загруженных изображений",
- "EnableFastImageFadeIn": "Быстрое появление изображения",
+ "EnableFastImageFadeInHelp": "Показывать постеры и другие рисунки анимацией побыстрее , когда они закончат загружаться.",
+ "EnableFastImageFadeIn": "Быстрое анимация рисунка",
"LabelPlayerDimensions": "Размеры проигрывателя:",
"LabelDroppedFrames": "Пропущенные кадры:",
"LabelCorruptedFrames": "Испорченные кадры:",
@@ -1520,5 +1520,37 @@
"HeaderServerAddressSettings": "Параметры адреса сервера",
"HeaderRemoteAccessSettings": "Параметры удалённого доступа",
"HeaderHttpsSettings": "Параметры HTTPS",
- "HeaderDVR": "DVR"
+ "HeaderDVR": "DVR",
+ "MessageSyncPlayJoinGroupDenied": "Требуется разрешение для использования SyncPlay.",
+ "MessageSyncPlayDisabled": "SyncPlay отключен.",
+ "MessageSyncPlayEnabled": "SyncPlay включён.",
+ "LabelSyncPlayAccess": "Доступ к SyncPlay",
+ "LabelSyncPlayLeaveGroupDescription": "Отключить SyncPlay",
+ "HeaderSyncPlayEnabled": "SyncPlay включён",
+ "HeaderSyncPlaySelectGroup": "Присоединить группу",
+ "EnableDetailsBanner": "Баннер подробностей",
+ "EnableDetailsBannerHelp": "Отображает рисунок баннера вверху страницы подробностей элемента.",
+ "MessageSyncPlayErrorAccessingGroups": "Произошла ошибка при попытке доступа к списку групп.",
+ "MessageSyncPlayLibraryAccessDenied": "Доступ к данному содержанию ограничен.",
+ "MessageSyncPlayCreateGroupDenied": "Требуется разрешение для создания группы.",
+ "MessageSyncPlayGroupDoesNotExist": "Не удалось присоединиться к группе, поскольку она не существует.",
+ "MessageSyncPlayPlaybackPermissionRequired": "Требуется разрешение на воспроизведение.",
+ "MessageSyncPlayNoGroupsAvailable": "Никакие группы не доступны. Сначала начните воспроизводить что-нибудь.",
+ "MessageSyncPlayGroupWait": "{0} буферизуется...",
+ "MessageSyncPlayUserLeft": "{0} покинул группу.",
+ "MessageSyncPlayUserJoined": "{0} присоединил группу.",
+ "LabelSyncPlayAccessNone": "Отключено для данного пользователя",
+ "LabelSyncPlayAccessJoinGroups": "Разрешить пользователю присоединяться к группам",
+ "LabelSyncPlayAccessCreateAndJoinGroups": "Разрешить пользователю создавать и присоединять группы",
+ "LabelSyncPlayLeaveGroup": "Покинуть группу",
+ "LabelSyncPlayNewGroupDescription": "Создание новой группы",
+ "LabelSyncPlayNewGroup": "Новая группа",
+ "LabelSyncPlaySyncMethod": "Метод синхронизации:",
+ "LabelSyncPlayPlaybackDiff": "Разница времени воспроизведения:",
+ "MillisecondsUnit": "мс",
+ "LabelSyncPlayTimeOffset": "Сдвиг времени относительно сервера:",
+ "SyncPlayAccessHelp": "Выберите уровень доступа данного пользователя к функциональности SyncPlay. SyncPlay позволяет синхронизировать воспроизведение с другими устройствами.",
+ "MessageSyncPlayErrorMedia": "Не удалось включить SyncPlay! Ошибка медиаданных.",
+ "MessageSyncPlayErrorMissingSession": "Не удалось включить SyncPlay! Отсутствует сеанс.",
+ "MessageSyncPlayErrorNoActivePlayer": "Активный проигрыватель не найден. SyncPlay был отключен."
}
diff --git a/src/strings/sk.json b/src/strings/sk.json
index 3d3b12f0d7..e99883d24e 100644
--- a/src/strings/sk.json
+++ b/src/strings/sk.json
@@ -721,7 +721,7 @@
"Refresh": "Obnoviť",
"RefreshMetadata": "Obnoviť metadáta",
"ReleaseDate": "Dátum vydania",
- "RememberMe": "Zapamätať si ma",
+ "RememberMe": "Zapamätaj si ma",
"RemoveFromCollection": "Odobrať z kolekcie",
"Repeat": "Opakovať",
"RepeatAll": "Opakovať všetko",
@@ -1457,8 +1457,8 @@
"MessageConfirmAppExit": "Chceli by ste odísiť?",
"LabelVideoResolution": "Rozlíšenie videa:",
"LabelStreamType": "Typ streamu:",
- "EnableFastImageFadeInHelp": "Povoliť animáciu rýchleho rozjasnenia pre nahrané obrázky",
- "EnableFastImageFadeIn": "Rýchle rozjasnenie obrázku",
+ "EnableFastImageFadeInHelp": "Zobrazí plagát a ostatné obrázky s rýchlejšou animáciou prechodu po dokončení načítania.",
+ "EnableFastImageFadeIn": "Rýchla animácia prechodu obrázku",
"LabelPlayerDimensions": "Rozmery prehrávača:",
"LabelDroppedFrames": "Vynechané snímky:",
"LabelCorruptedFrames": "Poškodené snímky:",
@@ -1521,5 +1521,37 @@
"HeaderRemoteAccessSettings": "Nastavenie vzdialeného prístupu",
"HeaderHttpsSettings": "Nastavenia HTTPS",
"HeaderDVR": "DVR",
- "SaveChanges": "Uložiť zmeny"
+ "SaveChanges": "Uložiť zmeny",
+ "MessageSyncPlayErrorMedia": "Povolenie synchronizácie prehrávania zlyhalo! Chyba média.",
+ "MessageSyncPlayErrorMissingSession": "Zapnutie synchronizácie prehrávania zlyhalo! Aktívna relácia nebola nájdená.",
+ "MessageSyncPlayErrorNoActivePlayer": "Nebol nájdený žiadny aktívny prehrávač. Synchronizácia prehrávania bola vypnutá.",
+ "MessageSyncPlayErrorAccessingGroups": "Pri načítaní zoznamu skupín sa vyskytla chyba.",
+ "MessageSyncPlayLibraryAccessDenied": "Prístup k tomuto obsahuje je obmedzený.",
+ "MessageSyncPlayJoinGroupDenied": "K použitiu synchronizácie prehrávania je vyžadované povolenie.",
+ "MessageSyncPlayCreateGroupDenied": "K vytvoreniu skupiny je požadované povolenie.",
+ "MessageSyncPlayGroupDoesNotExist": "Pripojenie ku skupine zlyhalo, pretože skupina neexistuje.",
+ "MessageSyncPlayPlaybackPermissionRequired": "K prehrávaniu je potrebné povolenie.",
+ "MessageSyncPlayNoGroupsAvailable": "Nie je dostupná žiadna skupina. Skúste najskôr začať niečo prehrávať.",
+ "MessageSyncPlayGroupWait": "Prehrávanie používateľa {0} sa načítava...",
+ "MessageSyncPlayUserLeft": "Používateľ {0} opustil skupinu.",
+ "MessageSyncPlayUserJoined": "Používateľ {0} sa pripojil k skupine.",
+ "MessageSyncPlayDisabled": "Synchronizácia prehrávania zakázana.",
+ "MessageSyncPlayEnabled": "Synchronizácia prehrávania povolená.",
+ "LabelSyncPlayAccess": "Prístup k synchronizácií prehrávania",
+ "LabelSyncPlayAccessNone": "Zakázať pre tohoto používateľa",
+ "LabelSyncPlayAccessJoinGroups": "Povoliť použivateľovi pripájať sa do skupín",
+ "LabelSyncPlayAccessCreateAndJoinGroups": "Povoliť používateľovi vytvárať a pripájať sa do skupín",
+ "LabelSyncPlayLeaveGroupDescription": "Zakázať synchronizáciu prehrávania",
+ "LabelSyncPlayLeaveGroup": "Opustiť skupinu",
+ "LabelSyncPlayNewGroupDescription": "Vytvoriť novú skupinu",
+ "LabelSyncPlayNewGroup": "Nová skupina",
+ "LabelSyncPlaySyncMethod": "Spôsob synchronizácie:",
+ "LabelSyncPlayPlaybackDiff": "Rozdiel v dobe prehrávania:",
+ "MillisecondsUnit": "ms",
+ "LabelSyncPlayTimeOffset": "Časový rozdiel so serverom:",
+ "HeaderSyncPlayEnabled": "Synchronizácia prehrávania je povolená",
+ "HeaderSyncPlaySelectGroup": "Pripojiť sa k skupine",
+ "SyncPlayAccessHelp": "Vyberte úroveň prístupu pre tohto používateľa k funkcií synchronizácie prehrávania. Synchronizácia prehrávania umožňuje zosynchronizovať prehrávanie s ostatnými zariadeniami.",
+ "EnableDetailsBannerHelp": "Zobrazí banner na vrchnej časti detailu položky.",
+ "EnableDetailsBanner": "Detail banneru"
}
diff --git a/src/strings/sv.json b/src/strings/sv.json
index 443549e797..282fec7b7e 100644
--- a/src/strings/sv.json
+++ b/src/strings/sv.json
@@ -13,7 +13,7 @@
"Albums": "Album",
"All": "Alla",
"AllChannels": "Alla kanaler",
- "AllComplexFormats": "Alla komplexa format (ASS, SSA, VOBSUB, PGS, SUB/IDX, etc.)",
+ "AllComplexFormats": "Alla komplexa format (ASS, SSA, VOBSUB, PGS, SUB/IDX, ...)",
"AllEpisodes": "Alla avsnitt",
"AllLanguages": "Alla språk",
"AllLibraries": "Alla bibliotek",
@@ -26,7 +26,7 @@
"AlwaysPlaySubtitlesHelp": "Undertexter på det önskade språket kommer att laddas oavsett ljudspårets språk.",
"AnyLanguage": "Alla språk",
"Anytime": "När som helst",
- "AroundTime": "Runt {0}",
+ "AroundTime": "Runt",
"Art": "Grafik",
"Artists": "Artister",
"AsManyAsPossible": "Så många som möjligt",
@@ -40,13 +40,13 @@
"BirthDateValue": "Född: {0}",
"BirthLocation": "Födelseort",
"BirthPlaceValue": "Födelseort:{0}",
- "BookLibraryHelp": "Ljud- och textböcker stöds. Läs {0}boknamngivningsguide{1}.",
+ "BookLibraryHelp": "Ljud- och textböcker stöds. Läs {0} boknamngivningsguiden {1}.",
"Books": "Böcker",
"Box": "Omslag",
"BoxRear": "Omslag (baksida)",
"Browse": "Bläddra",
"BrowsePluginCatalogMessage": "Besök katalogen för att se tillgängliga tillägg.",
- "BurnSubtitlesHelp": "Avgör ifall servern ska \"bränna in\" undertexterna under transkodning. Att undvika detta förbättrar prestandan avsevärt. Välj \"Automatisk\" för att bränna bild-baserade format (ex. VOBSUB, PGS, SUB/IDX, etc.) och vissa ASS/SSA-undertexter.",
+ "BurnSubtitlesHelp": "Avgör ifall servern ska \"bränna in\" undertexterna under transkodning. Att undvika detta förbättrar prestandan avsevärt. Välj \"Automatisk\" för att bränna bild-baserade format (ex. VOBSUB, PGS, SUB/IDX, ...) och vissa ASS/SSA-undertexter.",
"ButtonAdd": "Lägg till",
"ButtonAddMediaLibrary": "Lägg till mediabibliotek",
"ButtonAddScheduledTaskTrigger": "Lägg till utlösare",
@@ -988,7 +988,7 @@
"OptionMissingEpisode": "Saknade avsnitt",
"OptionMonday": "Måndag",
"OptionNameSort": "Namn",
- "OptionNew": "Ny...",
+ "OptionNew": "Ny…",
"OptionNone": "Inga",
"OptionOnAppStartup": "När servern startar",
"OptionOnInterval": "Med visst intervall",
@@ -1507,5 +1507,15 @@
"UnsupportedPlayback": "Jellyfin kan inte dekryptera inehåll skyddat av DRM men allt inehåll kommer ändå försökas, även skyddade titlar. Vissa filer kan se helt svart ut på grund av kryptering eller andra funktioner som inte stöds, till exempel interaktiva titlar.",
"LabelLibraryPageSizeHelp": "Sätter en begränsad sidstorlek i bibliotek. Sätt 0 för att avaktivera begränsad sidstorlek.",
"ApiKeysCaption": "Lista av aktiva API-nycklar",
- "DeinterlaceMethodHelp": "Välj metod för borttagning av inflätning vid konvertering av inflätat inehåll."
+ "DeinterlaceMethodHelp": "Välj metod för borttagning av inflätning vid konvertering av inflätat inehåll.",
+ "TabDVR": "PVR",
+ "SaveChanges": "Spara ändringar",
+ "LabelRequireHttps": "Kräv HTTPS",
+ "LabelChromecastVersion": "Chromecast-version",
+ "LabelEnableHttpsHelp": "Gör det möjligt för servern att lyssna på den konfigurerade HTTPS-porten. Ett giltigt certifikat måste också konfigureras för att detta ska fungera.",
+ "LabelEnableHttps": "Aktivera HTTPS",
+ "HeaderServerAddressSettings": "Serveradressinställningar",
+ "HeaderRemoteAccessSettings": "Inställningar för fjärråtkomst",
+ "HeaderHttpsSettings": "HTTPS-inställningar",
+ "HeaderDVR": "PVR"
}
diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json
index 9a3d55e218..0b51170196 100644
--- a/src/strings/zh-cn.json
+++ b/src/strings/zh-cn.json
@@ -29,7 +29,7 @@
"AlwaysPlaySubtitles": "总是显示",
"AlwaysPlaySubtitlesHelp": "无论音频为何种语言,都将加载与语言偏好匹配的字幕。",
"Anytime": "任何时间",
- "AroundTime": "{0} 左右",
+ "AroundTime": "大约",
"Artists": "艺术家",
"AsManyAsPossible": "尽可能多",
"Ascending": "升序",
@@ -548,7 +548,7 @@
"LabelEmbedAlbumArtDidl": "在DIDL中嵌入专辑封面",
"LabelEmbedAlbumArtDidlHelp": "有些设备首选这种方式获取专辑封面。启用该选项可能导致其他设备播放失败。",
"LabelEnableAutomaticPortMap": "开启自动端口映射",
- "LabelEnableAutomaticPortMapHelp": "尝试通过UPnP将路由器端口自动转发到服务器端口。这可能不适用于某些型号的路由器和网络配置。需要服务器重新启动后才会应用更改。",
+ "LabelEnableAutomaticPortMapHelp": "通过UPnP将路由器端口自动转发到服务器端口。这可能不适用于某些型号的路由器和网络配置。需要服务器重新启动后才会应用更改。",
"LabelEnableBlastAliveMessages": "爆发活动信号",
"LabelEnableBlastAliveMessagesHelp": "如果该服务器不能被网络中的其他UPnP设备检测到,请启用此选项。",
"LabelEnableDlnaClientDiscoveryInterval": "客户端搜寻时间间隔(秒)",
@@ -1455,7 +1455,7 @@
"ButtonAddImage": "添加图片",
"LabelPlayer": "播放器:",
"LabelBaseUrl": "基础 URL:",
- "LabelBaseUrlHelp": "在此处添加自定义子目录到服务器的 URL,例如:http://example.com/<baseurl>。",
+ "LabelBaseUrlHelp": "为服务器 URL添加自定义子目录,例如:http://example.com/<baseurl>。",
"MusicLibraryHelp": "重播 {0}音乐命名指南{1}。",
"HeaderFavoritePeople": "最喜欢的人物",
"OptionRandom": "随机",
@@ -1520,6 +1520,9 @@
"LabelRequireHttpsHelp": "开启后服务器将自动将所有 HTTP 请求重定向到 HTTPS。如果服务器没有启用 HTTPS 则不生效。",
"LabelRequireHttps": "强制 HTTPS",
"LabelStable": "稳定版",
- "LabelEnableHttpsHelp": "开启服务器监听 HTTPS 端口。必须配置有效的证书才会生效。",
- "LabelEnableHttps": "启用 HTTPS"
+ "LabelEnableHttpsHelp": "开启服务器对所配置HTTPS 端口的监听。必须配置有效的证书才会生效。",
+ "LabelEnableHttps": "启用 HTTPS",
+ "LabelChromecastVersion": "Chromecast版本",
+ "HeaderDVR": "DVR",
+ "LabelNightly": "Nightly"
}
diff --git a/src/useredit.html b/src/useredit.html
index 253387b4ac..c3a613bed4 100644
--- a/src/useredit.html
+++ b/src/useredit.html
@@ -104,6 +104,16 @@