1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2026-03-09 15:00:03 -04:00

Compare commits

...

6 Commits

Author SHA1 Message Date
Mark McDowall
7b0eb44fa7 Theme specific metadata source images 2026-03-08 17:52:20 -07:00
Mark McDowall
421c1f5470 Fix v5 language select and filtering 2026-03-08 17:52:19 -07:00
Bogdan
01c7d06da4 Bump Dapper, MailKit, Polly, Swashbuckle and NLog.Layouts.ClefJsonLayout 2026-03-08 09:28:34 -07:00
Bogdan
f7c7f8db8c Remove postcss-url 2026-03-08 09:28:34 -07:00
Bogdan
f9f71d3f2a Bump terser-webpack-plugin 2026-03-08 09:28:34 -07:00
Weblate
0723459122 Multiple Translations updated by Weblate
ignore-downstream

Co-authored-by: FASTAWFUL <laochuang666@gmail.com>
Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: Rodion <rodyon009@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: fordas <fordas15@gmail.com>
Co-authored-by: ugyes <ferenc.bodi@live.com>
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/es/
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/pt_BR/
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/uk/
Translate-URL: https://translate.servarr.com/projects/servarr/sonarr/zh_CN/
Translation: Servarr/Sonarr
2026-03-08 09:28:26 -07:00
23 changed files with 406 additions and 309 deletions

View File

@@ -18,6 +18,9 @@ export interface LanguageSelectInputProps {
includeNoChange?: boolean;
includeNoChangeDisabled?: boolean;
includeMixed?: boolean;
includeAny?: boolean;
includeOriginal?: boolean;
includeUnknown?: boolean;
isDisabled?: boolean;
onChange: (payload: LanguageSelectInputOnChangeProps) => void;
}
@@ -27,13 +30,16 @@ export default function LanguageSelectInput({
includeNoChange = false,
includeNoChangeDisabled,
includeMixed = false,
includeAny = true,
includeOriginal = false,
includeUnknown = false,
onChange,
...otherProps
}: LanguageSelectInputProps) {
const { data: items = [] } = useFilteredLanguages({
includeAny: true,
includeOriginal: true,
includeUnknown: true,
Any: !includeAny,
Original: !includeOriginal,
Unknown: !includeUnknown,
});
const values = useMemo(() => {

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -2,10 +2,18 @@ import { useEffect, useState } from 'react';
import { useUiSettingsValues } from 'Settings/UI/useUiSettings';
import themes from 'Styles/Themes';
const useTheme = () => {
const useTheme = (): 'dark' | 'light' => {
const { theme } = useUiSettingsValues();
const selectedTheme = theme ?? window.Sonarr.theme;
const [resolvedTheme, setResolvedTheme] = useState(selectedTheme);
const [resolvedTheme, setResolvedTheme] = useState(() => {
if (selectedTheme === 'auto') {
return window.matchMedia('(prefers-color-scheme: dark)').matches
? 'dark'
: 'light';
}
return selectedTheme;
});
useEffect(() => {
if (selectedTheme !== 'auto') {

View File

@@ -32,8 +32,8 @@ function SelectLanguageModalContent(props: SelectLanguageModalContentProps) {
isFetched: isPopulated,
error,
} = useFilteredLanguages({
includeAny: true,
includeOriginal: true,
Any: true,
Original: true,
});
const [languageIds, setLanguageIds] = useState(props.languageIds);

View File

@@ -4,9 +4,9 @@ import Language from 'Language/Language';
interface LanguageFilter {
[key: string]: boolean | undefined;
includeAny: boolean;
includeOriginal?: boolean;
includeUnknown?: boolean;
Any: boolean;
Original?: boolean;
Unknown?: boolean;
}
const PATH = '/language';
@@ -22,12 +22,14 @@ export const useLanguages = () => {
};
export const useFilteredLanguages = (
excludeLanguages: LanguageFilter = { includeAny: true }
excludeLanguages: LanguageFilter = { Any: true }
) => {
const { data, isFetching, isFetched, error } = useLanguages();
const filteredItems = useMemo(() => {
if (!data) return [];
if (!data) {
return [];
}
return data.filter((lang) => !excludeLanguages[lang.name]);
}, [data, excludeLanguages]);

View File

@@ -1,14 +1,17 @@
import React from 'react';
import InlineMarkdown from 'Components/Markdown/InlineMarkdown';
import useTheme from 'Helpers/Hooks/useTheme';
import translate from 'Utilities/String/translate';
import styles from './TheTvdb.css';
function TheTvdb() {
const theme = useTheme();
return (
<div className={styles.container}>
<img
className={styles.image}
src={`${window.Sonarr.urlBase}/Content/Images/thetvdb.png`}
src={`${window.Sonarr.urlBase}/Content/Images/thetvdb-${theme}.png`}
/>
<div className={styles.info}>

View File

@@ -67,9 +67,9 @@ function UISettings() {
isFetched: isLanguagesPopulated,
error: languagesError,
} = useFilteredLanguages({
includeAny: true,
includeOriginal: true,
includeUnknown: true,
Any: true,
Original: true,
Unknown: true,
});
const {
@@ -258,6 +258,8 @@ function UISettings() {
name="uiLanguage"
helpText={translate('UiLanguageHelpText')}
helpTextWarning={translate('BrowserReloadRequired')}
includeOriginal={false}
includeUnknown={false}
onChange={handleInputChange}
{...settings.uiLanguage}
errors={

View File

@@ -137,14 +137,13 @@
"postcss-mixins": "9.0.4",
"postcss-nested": "6.2.0",
"postcss-simple-vars": "7.0.1",
"postcss-url": "10.1.3",
"prettier": "2.8.8",
"require-nocache": "1.0.0",
"rimraf": "6.1.3",
"style-loader": "3.3.2",
"stylelint": "15.6.1",
"stylelint-order": "6.0.4",
"terser-webpack-plugin": "5.3.10",
"terser-webpack-plugin": "5.3.17",
"ts-loader": "9.5.1",
"typescript-plugin-css-modules": "5.0.1",
"url-loader": "4.1.1",

View File

@@ -38,7 +38,7 @@ dotnet clean $slnFile -c Release
dotnet msbuild -restore $slnFile -p:Configuration=Debug -p:Platform=$platform -p:RuntimeIdentifiers=$RUNTIME -t:PublishAllRids
dotnet new tool-manifest
dotnet tool install --version 10.1.2 Swashbuckle.AspNetCore.Cli
dotnet tool install --version 10.1.4 Swashbuckle.AspNetCore.Cli
# Remove the openapi.json file so we can check if it was created
rm $outputFile

View File

@@ -11,7 +11,7 @@
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="10.0.3" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
<PackageReference Include="NLog" Version="5.5.1" />
<PackageReference Include="NLog.Layouts.ClefJsonLayout" Version="1.0.4" />
<PackageReference Include="NLog.Layouts.ClefJsonLayout" Version="1.0.5" />
<PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.5.0" />
<PackageReference Include="Sentry" Version="5.16.3" />

View File

@@ -3,7 +3,7 @@
<TargetFrameworks>net10.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.1.66" />
<PackageReference Include="Dapper" Version="2.1.72" />
<PackageReference Include="NBuilder" Version="6.1.0" />
</ItemGroup>
<ItemGroup>

View File

@@ -62,6 +62,10 @@
"AgeWhenGrabbed": "Antigüedad (cuando se añadió)",
"Agenda": "Agenda",
"AirDate": "Fecha de Emisión",
"AirDateGracePeriod": "Período de gracia de la fecha de emisión",
"AirDateGracePeriodHelpText": "Valores negativos permiten capturar antes de la fecha de emisión, valores positivos evitan capturar después de la fecha de emisión.",
"AirDateRestriction": "Rechazar lanzamientos sin emitir",
"AirDateRestrictionHelpText": "Evita que {appName} capture lanzamientos que contienen episodios que aún no se han emitido.",
"Airs": "Emision",
"AirsDateAtTimeOn": "{date} en {time} en{networkLabel}",
"AirsTbaOn": "A anunciar en {networkLabel}",
@@ -132,6 +136,7 @@
"AutoTaggingSpecificationMaximumYear": "Año máximo",
"AutoTaggingSpecificationMinimumYear": "Año mínimo",
"AutoTaggingSpecificationNetwork": "Red(es)",
"AutoTaggingSpecificationOriginalCountry": "País",
"AutoTaggingSpecificationOriginalLanguage": "Idioma",
"AutoTaggingSpecificationQualityProfile": "Perfil de calidad",
"AutoTaggingSpecificationRootFolder": "Carpeta raíz",
@@ -1612,6 +1617,7 @@
"OrganizeSelectedSeriesModalConfirmation": "¿Estás seguro que quieres organizar todos los archivos en las {count} series seleccionadas?",
"OrganizeSelectedSeriesModalHeader": "Organizar series seleccionadas",
"Original": "Original",
"OriginalCountry": "País original",
"OriginalLanguage": "Idioma original",
"Other": "Otro",
"OutputPath": "Ruta de salida",

View File

@@ -62,6 +62,10 @@
"AgeWhenGrabbed": "Kor (amikor megragadták)",
"Agenda": "Teendők",
"AirDate": "Adásba kerülés dátuma",
"AirDateGracePeriod": "Sugárzási türelmi idő",
"AirDateGracePeriodHelpText": "A negatív értékek lehetővé teszik a letöltést a sugárzási dátum előtt, a pozitív értékek pedig megakadályozzák a letöltést a sugárzási dátum után.",
"AirDateRestriction": "Adásba nem került epizódok elutasítása",
"AirDateRestrictionHelpText": "Megakadályozza, hogy a {appName} olyan kiadásokat töltsön le, amelyek adásba még nem került epizódokat tartalmaznak.",
"Airs": "Adásban",
"AirsDateAtTimeOn": "{date} {time}-kor a(z) {networkLabel}-on/en/ön",
"AirsTbaOn": "Bejelentés alatt a(z) {networkLabel}-on/en/ön",
@@ -132,6 +136,7 @@
"AutoTaggingSpecificationMaximumYear": "Maximum Év",
"AutoTaggingSpecificationMinimumYear": "Minimum Év",
"AutoTaggingSpecificationNetwork": "Hálózat",
"AutoTaggingSpecificationOriginalCountry": "Ország",
"AutoTaggingSpecificationOriginalLanguage": "Nyelv",
"AutoTaggingSpecificationQualityProfile": "Minőségi Profil",
"AutoTaggingSpecificationRootFolder": "Gyökérmappa",
@@ -185,9 +190,9 @@
"CalendarFeed": "{appName} Naptár Feed",
"CalendarLegendEpisodeDownloadedTooltip": "Az epizódot letöltötték és rendezték",
"CalendarLegendEpisodeDownloadingTooltip": "Epizód letöltés alatt",
"CalendarLegendEpisodeMissingTooltip": "Az epizódot leadták, és hiányzik a lemezről",
"CalendarLegendEpisodeMissingTooltip": "Az epizód adásba került, és hiányzik a lemezről",
"CalendarLegendEpisodeOnAirTooltip": "Az epizód jelenleg adásban van",
"CalendarLegendEpisodeUnairedTooltip": "Az epizódot még nem adták le",
"CalendarLegendEpisodeUnairedTooltip": "Az epizód még nem került adásba",
"CalendarLegendEpisodeUnmonitoredTooltip": "Az epizód nem figyelhető",
"CalendarLegendSeriesFinaleTooltip": "Sorozat vagy évad finálé",
"CalendarLegendSeriesPremiereTooltip": "Sorozat vagy évad premierje",
@@ -882,7 +887,7 @@
"ImportListsAniListSettingsImportDropped": "Importálás elvetve",
"ImportListsAniListSettingsImportDroppedHelpText": "Lista: Elvetve",
"ImportListsAniListSettingsImportFinished": "Az importálás befejeződött",
"ImportListsAniListSettingsImportFinishedHelpText": "Média: Minden epizódot leadtak",
"ImportListsAniListSettingsImportFinishedHelpText": "Média: Minden epizód adásba került",
"ImportListsAniListSettingsImportHiatus": "Importálás szünet",
"ImportListsAniListSettingsImportHiatusHelpText": "Média: Szünetelő sorozatok",
"ImportListsAniListSettingsImportNotYetReleased": "Az importálás még nem jelent meg",
@@ -1273,15 +1278,15 @@
"MonitorEpisodes": "Epizódok figyelése",
"MonitorEpisodesModalInfo": "Ez a beállítás csak azt módosítja, hogy egy sorozaton belül mely epizódok vagy évadok legyenek figyelve. A Nincs kiválasztása a sorozat figyelésének leállítását eredményezi",
"MonitorExistingEpisodes": "Meglévő epizódok",
"MonitorExistingEpisodesDescription": "Figyelje meg azokat az epizódokat, amelyekben vannak fájlok, vagy amelyek még nem kerültek adásba",
"MonitorExistingEpisodesDescription": "Figyelje azokat az epizódokat, amelyeknek vannak fájljai, vagy amelyek még nem kerültek adásba",
"MonitorFirstSeason": "Első évad",
"MonitorFirstSeasonDescription": "Kövesse nyomon az első évad összes epizódját. Az összes többi évadot figyelmen kívül hagyjuk",
"MonitorFutureEpisodes": "Jövőbeni epizódok",
"MonitorFutureEpisodesDescription": "Figyelje meg az adásba még nem került epizódokat",
"MonitorFutureEpisodesDescription": "Figyelje az adásba még nem került epizódokat",
"MonitorLastSeason": "Utolsó évad",
"MonitorLastSeasonDescription": "Kövesse nyomon az elmúlt évad összes epizódját",
"MonitorMissingEpisodes": "Hiányzó epizódok",
"MonitorMissingEpisodesDescription": "Figyelje meg azokat az epizódokat, amelyekhez nem tartoznak fájlok, vagy amelyeket még nem kerültek adásba",
"MonitorMissingEpisodesDescription": "Figyelje azokat az epizódokat, amelyekhez nem tartoznak fájlok, vagy amelyek még nem kerültek adásba",
"MonitorNewItems": "Új elemek figyelése",
"MonitorNewSeasons": "Kövesse az új évadokat",
"MonitorNewSeasonsHelpText": "Mely új évadokat kell automatikusan figyelni",
@@ -1612,6 +1617,7 @@
"OrganizeSelectedSeriesModalConfirmation": "Biztos benne hogy rendszerezni kívánja a kiválaszott {count} sorozat összes fájlját?",
"OrganizeSelectedSeriesModalHeader": "Kiválasztott sorozatok rendszerezése",
"Original": "Eredeti",
"OriginalCountry": "Gyártási ország",
"OriginalLanguage": "Eredeti nyelv",
"Other": "Egyéb",
"OutputPath": "Kimeneti útvonal",

View File

@@ -62,6 +62,10 @@
"AgeWhenGrabbed": "Tempo de vida (quando obtido)",
"Agenda": "Programação",
"AirDate": "Data de exibição",
"AirDateGracePeriod": "Período de Carência para Data de Exibição",
"AirDateGracePeriodHelpText": "Valores negativos permitem baixar antes da data de exibição, valores positivos evitam baixar após a data de exibição.",
"AirDateRestriction": "Rejeitar Lançamentos Não Exibidos",
"AirDateRestrictionHelpText": "Impede {appName} baixe lançamentos que contenham episódios que ainda não foram exibidos.",
"Airs": "Vai ao ar em",
"AirsDateAtTimeOn": "{date} às {time} em {networkLabel}",
"AirsTbaOn": "A ser anunciado em {networkLabel}",
@@ -132,6 +136,7 @@
"AutoTaggingSpecificationMaximumYear": "Ano máximo",
"AutoTaggingSpecificationMinimumYear": "Ano mínimo",
"AutoTaggingSpecificationNetwork": "Rede(s)",
"AutoTaggingSpecificationOriginalCountry": "País",
"AutoTaggingSpecificationOriginalLanguage": "Idioma",
"AutoTaggingSpecificationQualityProfile": "Perfil de qualidade",
"AutoTaggingSpecificationRootFolder": "Pasta raiz",
@@ -1612,6 +1617,7 @@
"OrganizeSelectedSeriesModalConfirmation": "Tem certeza de que deseja organizar todos os arquivos da {count} série selecionada?",
"OrganizeSelectedSeriesModalHeader": "Organizar Séries Selecionadas",
"Original": "Original",
"OriginalCountry": "País Original",
"OriginalLanguage": "Idioma Original",
"Other": "Outro",
"OutputPath": "Caminho de saída",

View File

@@ -61,6 +61,10 @@
"AgeWhenGrabbed": "Вік (коли схоплено)",
"Agenda": "План",
"AirDate": "Дата виходу в ефір",
"AirDateGracePeriod": "Допустимий період відносно дати виходу в ефір",
"AirDateGracePeriodHelpText": "Від’ємні значення дозволяють завантаження до дати виходу в ефір, додатні — забороняють завантаження після дати виходу в ефір.",
"AirDateRestriction": "Відхиляти релізи з невипущеними епізодами",
"AirDateRestrictionHelpText": "Запобігти тому, щоб {appName} завантажував релізи, які містять епізоди, що ще не вийшли в ефір.",
"Airs": "Ефіри",
"AirsDateAtTimeOn": "{date} о {time} на {networkLabel}",
"AirsTbaOn": "Будь ласка, оголосіть пізніше на {networkLabel}",
@@ -131,6 +135,7 @@
"AutoTaggingSpecificationMaximumYear": "Максимальний рік",
"AutoTaggingSpecificationMinimumYear": "Мінімальний рік",
"AutoTaggingSpecificationNetwork": "Телеканал",
"AutoTaggingSpecificationOriginalCountry": "Країна",
"AutoTaggingSpecificationOriginalLanguage": "Мова",
"AutoTaggingSpecificationQualityProfile": "Профіль якості",
"AutoTaggingSpecificationRootFolder": "Коренева тека",
@@ -1588,6 +1593,7 @@
"OrganizeSelectedSeriesModalConfirmation": "Ви впевнені, що хочете упорядкувати всі файли у вибраному серіалі: {count}?",
"OrganizeSelectedSeriesModalHeader": "Упорядкувати вибрані серіали",
"Original": "Оригінал",
"OriginalCountry": "Країна оригіналу",
"OriginalLanguage": "Мова оригіналу",
"Other": "Інше",
"OutputPath": "Вихідний шлях",

View File

@@ -467,6 +467,7 @@
"DownloadClientFreeboxSettingsPortHelpText": "用于访问 Freebox 接口的端口,默认为 '{port}'",
"DownloadClientFreeboxUnableToReachFreebox": "无法访问 Freebox API。请检查 “主机名”、“端口” 或 “使用 SSL” 的设置(错误: {exceptionMessage}",
"DownloadClientFreeboxUnableToReachFreeboxApi": "无法访问 Freebox API。 请检查 “API 地址” 的基础地址和版本。",
"DownloadClientItemErrorMessage": "{clientName}回報錯誤:{message}",
"DownloadClientNzbVortexMultipleFilesMessage": "下载包含多个文件且不在作业文件夹中:{outputPath}",
"DownloadClientNzbgetSettingsAddPausedHelpText": "此选项至少需要 NzbGet 版本 16.0",
"DownloadClientNzbgetValidationKeepHistoryOverMax": "NzbGet 设置 KeepHistory 应小于 25000",

View File

@@ -3,16 +3,16 @@
<TargetFrameworks>net10.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.1.66" />
<PackageReference Include="Dapper" Version="2.1.72" />
<PackageReference Include="Diacritical.Net" Version="1.0.5" />
<PackageReference Include="Equ" Version="2.3.0" />
<PackageReference Include="MailKit" Version="4.14.1" />
<PackageReference Include="MailKit" Version="4.15.1" />
<PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="10.0.3" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.1.4" />
<PackageReference Include="MiniProfiler.AspNetCore" Version="4.5.4" />
<PackageReference Include="Openur.FFMpegCore" Version="5.4.0.31" />
<PackageReference Include="Openur.FFprobeStatic" Version="8.0.1.302" />
<PackageReference Include="Polly" Version="8.6.5" />
<PackageReference Include="Polly" Version="8.6.6" />
<PackageReference Include="System.Drawing.Common" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="10.0.3" />

View File

@@ -6,7 +6,7 @@
<ItemGroup>
<PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.5.4" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.5.0" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="10.1.2" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="10.1.4" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="10.0.3" />
<PackageReference Include="DryIoc.dll" Version="5.4.3" />
<PackageReference Include="DryIoc.Microsoft.DependencyInjection" Version="6.2.0" />

View File

@@ -6,7 +6,7 @@
<PackageReference Include="FluentValidation" Version="9.5.4" />
<PackageReference Include="Ical.Net" Version="4.3.1" />
<PackageReference Include="NLog" Version="5.5.1" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="10.1.2" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="10.1.4" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\NzbDrone.Core\Sonarr.Core.csproj" />

View File

@@ -9,7 +9,7 @@
<PackageReference Include="FluentValidation" Version="9.5.4" />
<PackageReference Include="Ical.Net" Version="4.3.1" />
<PackageReference Include="NLog" Version="5.5.1" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="10.1.2" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="10.1.4" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\NzbDrone.Core\Sonarr.Core.csproj" />

604
yarn.lock

File diff suppressed because it is too large Load Diff