Я использую ABP v4.9.0 (. NET CORE 2.2) с angular клиентом
Я создал несколько пользовательских провайдеров локализации. Эти провайдеры получают словари перевода из внешнего API. Я добавляю источники локализации при запуске с этими провайдерами.
var customProvider = new CustomLocalizationProvider(...);
var localizationSource = new DictionaryBasedLocalizationSource("SOURCENAME", customProvider );
config.Localization.Sources.Add(localizationSource );
При запуске вызывается провайдер InitializeDictionaries () и создаются словари локализации. Пока все хорошо, работает как задумано.
Теперь я хотел бы вручную перегрузить эти переводы по требованию, но я не могу заставить это работать.
Вот что я попробовал.
Здесь я запускаю повторную синхронизацию языковых ресурсов:
foreach (var localizationSource in _localizationConfiguration.Sources)
{
try
{
localizationSource.Initialize(_localizationConfiguration, _iocResolver);
}
catch (Exception e)
{
Logger.Warn($"Could not get Localization Data for source '{localizationSource.Name}'", e);
}
}
В пользовательском провайдере я сначала очищаю Словари
public class CustomLocalizationProvider : LocalizationDictionaryProviderBase
{
protected int IterationNo = 0;
protected override void InitializeDictionaries()
{
Dictionaries.Clear();
IterationNo += 1;
var deDict = new LocalizationDictionary(new CultureInfo("de-DE"));
deDict["HelloWorld"] = $"Hallo Welt Nummer {IterationNo}";
Dictionaries.Add("de-DE", deDict);
var enDict = new LocalizationDictionary(new CultureInfo("en"));
enDict["HelloWorld"] = $"Hello World number {IterationNo}";
Dictionaries.Add("en", enDict);
}
}
Поставщик выполняется снова, как и ожидалось.
Но когда я в конечном итоге использую клиентскую локализацию (angular), Я все равно получаю оригинальные переводы.
Что я скучаю?
Спасибо за помощь.