ABP:从自定义提供程序重建本地化源
ABP: Rebuilding Localization Sources from Custom Provider
我正在使用 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) 时,我仍然得到原始翻译。
我错过了什么?
感谢您的帮助。
与此同时,我不得不采用另一种方法。
我现在使用 XmlEmbeddedFileLocalizationDictionaryProvider
包裹在 MultiTenantLocalizationDictionaryProvider
中。
这样,我使用 db-localizations 和 xml-sources 作为后备
然后我在某些应用程序服务中手动从 API 加载资源。然后使用 LanguageTextManager.UpdateStringAsync()
.
在数据库中更新这些本地化
我正在使用 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) 时,我仍然得到原始翻译。
我错过了什么?
感谢您的帮助。
与此同时,我不得不采用另一种方法。
我现在使用 XmlEmbeddedFileLocalizationDictionaryProvider
包裹在 MultiTenantLocalizationDictionaryProvider
中。
这样,我使用 db-localizations 和 xml-sources 作为后备
然后我在某些应用程序服务中手动从 API 加载资源。然后使用 LanguageTextManager.UpdateStringAsync()
.