diff --git a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/FileNameBuilderFixture.cs b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/FileNameBuilderFixture.cs index 2630ac9a3..4f7cfc692 100644 --- a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/FileNameBuilderFixture.cs +++ b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/FileNameBuilderFixture.cs @@ -526,6 +526,27 @@ namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests .Should().Be("South.Park.S15E06.City.Sushi.X264.DTS[EN+ES].[EN+ES+IT]"); } + [TestCase("Norwegian Bokmal", "NB")] + [TestCase("Swedis", "SV")] + [TestCase("Chinese", "ZH")] + public void should_format_languagecodes_properly(string language, string code) + { + _namingConfig.StandardEpisodeFormat = "{Series.Title}.S{season:00}E{episode:00}.{Episode.Title}.{MEDIAINFO.FULL}"; + + _episodeFile.MediaInfo = new Core.MediaFiles.MediaInfo.MediaInfoModel() + { + VideoCodec = "AVC", + AudioFormat = "DTS", + AudioChannels = 6, + AudioLanguages = "English", + Subtitles = language, + SchemaRevision = 3 + }; + + Subject.BuildFileName(new List { _episode1 }, _series, _episodeFile) + .Should().Be($"South.Park.S15E06.City.Sushi.X264.DTS.[{code}]"); + } + [Test] public void should_exclude_english_in_mediainfo_audio_language() { diff --git a/src/NzbDrone.Core/Organizer/FileNameBuilder.cs b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs index 95ff59636..63ccd282d 100644 --- a/src/NzbDrone.Core/Organizer/FileNameBuilder.cs +++ b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs @@ -13,6 +13,7 @@ using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.MediaFiles.MediaInfo; +using NzbDrone.Core.Parser; using NzbDrone.Core.Profiles.Releases; using NzbDrone.Core.Qualities; using NzbDrone.Core.Tv; @@ -671,9 +672,23 @@ namespace NzbDrone.Core.Organizer var cultures = CultureInfo.GetCultures(CultureTypes.NeutralCultures); for (int i = 0; i < tokens.Count; i++) { + if (tokens[i] == "Swedis") + { + // Probably typo in mediainfo (should be 'Swedish') + tokens[i] = "SV"; + continue; + } + + if (tokens[i] == "Chinese" && OsInfo.IsNotWindows) + { + // Mono only has 'Chinese (Simplified)' & 'Chinese (Traditional)' + tokens[i] = "ZH"; + continue; + } + try { - var cultureInfo = cultures.FirstOrDefault(p => p.EnglishName == tokens[i]); + var cultureInfo = cultures.FirstOrDefault(p => p.EnglishName.RemoveAccent() == tokens[i]); if (cultureInfo != null) tokens[i] = cultureInfo.TwoLetterISOLanguageName.ToUpper();