diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs index dded0d794e..a4e55e9ddd 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs @@ -1,5 +1,6 @@ using System; using System.Globalization; +using System.Linq; using JetBrains.Annotations; namespace Volo.Abp.Localization; @@ -59,4 +60,31 @@ public static class CultureHelper { return new CultureInfo(cultureName).Parent.Name; } + + public static bool IsCompatibleCulture( + string sourceCultureName, + string targetCultureName) + { + if (sourceCultureName == targetCultureName) + { + return true; + } + + if (sourceCultureName.Contains("-")) + { + return false; + } + + if (!targetCultureName.Contains("-")) + { + return false; + } + + if (sourceCultureName == GetBaseCultureName(targetCultureName)) + { + return true; + } + + return false; + } } diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Localization/CultureHelper_Tests.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Localization/CultureHelper_Tests.cs new file mode 100644 index 0000000000..f3bd4a49a7 --- /dev/null +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Localization/CultureHelper_Tests.cs @@ -0,0 +1,20 @@ +using Shouldly; +using Xunit; + +namespace Volo.Abp.Localization; + +public class CultureHelper_Tests +{ + [Fact] + public void IsCompatibleCulture() + { + CultureHelper.IsCompatibleCulture("tr", "tr").ShouldBeTrue(); + CultureHelper.IsCompatibleCulture("tr", "tr-TR").ShouldBeTrue(); + + CultureHelper.IsCompatibleCulture("en", "tr").ShouldBeFalse(); + CultureHelper.IsCompatibleCulture("en", "tr-TR").ShouldBeFalse(); + + CultureHelper.IsCompatibleCulture("en-US", "en").ShouldBeFalse(); + CultureHelper.IsCompatibleCulture("en-US", "en-GB").ShouldBeFalse(); + } +} \ No newline at end of file