From 9c5015b8ec591610e10303c63f7df3faaef418db Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 9 Apr 2026 18:18:48 +0800 Subject: [PATCH] Refactor localization dictionary handling and improve test cases for split localization files --- ...FileLocalizationResourceContributorBase.cs | 21 +++++++++---------- .../AbpStringLocalizerFactory_Tests.cs | 2 +- ...JsonLocalizationDictionaryBuilder_Tests.cs | 20 +++++++----------- 3 files changed, 19 insertions(+), 24 deletions(-) diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs index b18eba1f46..d65e36a8f1 100644 --- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs @@ -89,7 +89,7 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza private Dictionary CreateDictionaries() { - var dictionaries = new Dictionary(); + var rawDictionaries = new Dictionary>(); foreach (var file in _virtualFileProvider.GetDirectoryContents(_virtualPath) .Where(f => !f.IsDirectory && CanParseFile(f)) @@ -102,20 +102,19 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza continue; } - if (!dictionaries.ContainsKey(dictionary.CultureName)) + if (!rawDictionaries.TryGetValue(dictionary.CultureName, out var raw)) { - dictionaries[dictionary.CultureName] = dictionary; - } - else - { - var merged = new Dictionary(); - dictionaries[dictionary.CultureName].Fill(merged); - dictionary.Fill(merged); - dictionaries[dictionary.CultureName] = new StaticLocalizationDictionary(dictionary.CultureName, merged); + raw = new Dictionary(); + rawDictionaries[dictionary.CultureName] = raw; } + + dictionary.Fill(raw); } - return dictionaries; + return rawDictionaries.ToDictionary( + kvp => kvp.Key, + kvp => (ILocalizationDictionary)new StaticLocalizationDictionary(kvp.Key, kvp.Value) + ); } protected abstract bool CanParseFile(IFileInfo file); diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpStringLocalizerFactory_Tests.cs b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpStringLocalizerFactory_Tests.cs index 9dbc5b8c1f..c39ff9b105 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpStringLocalizerFactory_Tests.cs +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpStringLocalizerFactory_Tests.cs @@ -93,7 +93,7 @@ public class AbpStringLocalizerFactory_Tests : AbpIntegratedTest