From 494bdfef1e5af0636a1c746e16fa8dc5d9b05512 Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Mon, 11 Feb 2019 09:16:35 +0100 Subject: [PATCH] Allow invariant languages to be resolved by specific cultures --- .../Implement/LanguageRepository.cs | 1 + .../Repositories/LanguageRepositoryTest.cs | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/LanguageRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/LanguageRepository.cs index b3f2ff4af0..5a62c25df7 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Implement/LanguageRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Implement/LanguageRepository.cs @@ -250,6 +250,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement lock (_codeIdMap) { if (_codeIdMap.TryGetValue(isoCode, out var id)) return id; + if (isoCode.Contains('-') && _codeIdMap.TryGetValue(isoCode.Split('-').First(), out var invariantId)) return invariantId; } if (throwOnNotFound) throw new ArgumentException($"Code {isoCode} does not correspond to an existing language.", nameof(isoCode)); diff --git a/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs index 5823537f7a..39f6e3e114 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs @@ -79,7 +79,39 @@ namespace Umbraco.Tests.Persistence.Repositories } } + [Test] + public void Can_Perform_Get_By_Invariant_Code_On_LanguageRepository() + { + var provider = TestObjects.GetScopeProvider(Logger); + using (var scope = provider.CreateScope()) + { + var repository = CreateRepository(provider); + var es = new CultureInfo("es"); + var esSpecific = new CultureInfo("es-ES"); + + var language = (ILanguage)new Language(es.Name) + { + CultureName = es.DisplayName, + FallbackLanguageId = 1 + }; + repository.Save(language); + + language = repository.GetByIsoCode(es.Name); + var languageSpecific = repository.GetByIsoCode(esSpecific.Name); + + // Assert + Assert.That(language, Is.Not.Null); + Assert.That(language.HasIdentity, Is.True); + Assert.That(language.IsoCode, Is.EqualTo(es.Name)); + + Assert.That(languageSpecific, Is.Not.Null); + Assert.That(languageSpecific.HasIdentity, Is.True); + Assert.That(languageSpecific.Id, Is.EqualTo(language.Id)); + Assert.That(language.IsoCode, Is.EqualTo(language.IsoCode)); + } + } + [Test] public void Get_When_Id_Doesnt_Exist_Returns_Null() {