Fixed: Fallback to English translations if invalid UI language in config

This commit is contained in:
Stevie Robinson 2023-09-01 02:47:38 +02:00 committed by GitHub
parent c123596c68
commit 4c72017412
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 1 deletions

View File

@ -220,6 +220,13 @@ class UISettings extends Component {
helpTextWarning={translate('BrowserReloadRequired')} helpTextWarning={translate('BrowserReloadRequired')}
onChange={onInputChange} onChange={onInputChange}
{...settings.uiLanguage} {...settings.uiLanguage}
errors={
languages.some((language) => language.key === settings.uiLanguage.value) ?
settings.uiLanguage.errors :
[
...settings.uiLanguage.errors,
{ message: translate('InvalidUILanguage') }
]}
/> />
</FormGroup> </FormGroup>
</FieldSet> </FieldSet>

View File

@ -656,6 +656,7 @@
"InteractiveSearchSeason": "Interactive search for all episodes in this season", "InteractiveSearchSeason": "Interactive search for all episodes in this season",
"Interval": "Interval", "Interval": "Interval",
"InvalidFormat": "Invalid Format", "InvalidFormat": "Invalid Format",
"InvalidUILanguage": "Your UI is set to an invalid language, correct it and save your settings",
"KeyboardShortcuts": "Keyboard Shortcuts", "KeyboardShortcuts": "Keyboard Shortcuts",
"KeyboardShortcutsCloseModal": "Close Current Modal", "KeyboardShortcutsCloseModal": "Close Current Modal",
"KeyboardShortcutsConfirmModal": "Accept Confirmation Modal", "KeyboardShortcutsConfirmModal": "Accept Confirmation Modal",

View File

@ -87,7 +87,7 @@ namespace NzbDrone.Core.Localization
public string GetLanguageIdentifier() public string GetLanguageIdentifier()
{ {
var isoLanguage = IsoLanguages.Get((Language)_configService.UILanguage); var isoLanguage = IsoLanguages.Get((Language)_configService.UILanguage) ?? IsoLanguages.Get(Language.English);
var language = isoLanguage.TwoLetterCode; var language = isoLanguage.TwoLetterCode;
if (isoLanguage.CountryCode.IsNotNullOrWhiteSpace()) if (isoLanguage.CountryCode.IsNotNullOrWhiteSpace())

View File

@ -1,7 +1,9 @@
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using FluentValidation;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.Languages;
using Sonarr.Http; using Sonarr.Http;
using Sonarr.Http.REST.Attributes; using Sonarr.Http.REST.Attributes;
@ -16,6 +18,17 @@ namespace Sonarr.Api.V3.Config
: base(configService) : base(configService)
{ {
_configFileProvider = configFileProvider; _configFileProvider = configFileProvider;
SharedValidator.RuleFor(c => c.UILanguage).Custom((value, context) =>
{
if (!Language.All.Any(o => o.Id == value))
{
context.AddFailure("Invalid UI Language value");
}
});
SharedValidator.RuleFor(c => c.UILanguage)
.GreaterThanOrEqualTo(1)
.WithMessage("The UI Language value cannot be less than 1");
} }
[RestPutById] [RestPutById]