| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- using System.Globalization;
- using System.Linq;
- using System.Reflection;
- namespace Abp.Localization.Dictionaries.Xml
- {
- /// <summary>
- /// Provides localization dictionaries from XML files embedded into an <see cref="Assembly"/>.
- /// </summary>
- public class XmlEmbeddedFileLocalizationDictionaryProvider : LocalizationDictionaryProviderBase
- {
- private readonly Assembly _assembly;
- private readonly string _rootNamespace;
-
- /// <summary>
- /// Creates a new <see cref="XmlEmbeddedFileLocalizationDictionaryProvider"/> object.
- /// </summary>
- /// <param name="assembly">Assembly that contains embedded xml files</param>
- /// <param name="rootNamespace">Namespace of the embedded xml dictionary files</param>
- public XmlEmbeddedFileLocalizationDictionaryProvider(Assembly assembly, string rootNamespace)
- {
- _assembly = assembly;
- _rootNamespace = rootNamespace;
- }
- public override void Initialize(string sourceName)
- {
- var allCultureInfos = CultureInfo.GetCultures(CultureTypes.AllCultures);
- var resourceNames = _assembly.GetManifestResourceNames().Where(resouceName =>
- allCultureInfos.Any(culture => resouceName.EndsWith($"{sourceName}.xml", true, null) ||
- resouceName.EndsWith($"{sourceName}-{culture.Name}.xml", true,
- null))).ToList();
- foreach (var resourceName in resourceNames)
- {
- if (resourceName.StartsWith(_rootNamespace))
- {
- using (var stream = _assembly.GetManifestResourceStream(resourceName))
- {
- var xmlString = Utf8Helper.ReadStringFromStream(stream);
- var dictionary = CreateXmlLocalizationDictionary(xmlString);
- if (Dictionaries.ContainsKey(dictionary.CultureInfo.Name))
- {
- throw new AbpInitializationException(sourceName + " source contains more than one dictionary for the culture: " + dictionary.CultureInfo.Name);
- }
- Dictionaries[dictionary.CultureInfo.Name] = dictionary;
- if (resourceName.EndsWith(sourceName + ".xml"))
- {
- if (DefaultDictionary != null)
- {
- throw new AbpInitializationException("Only one default localization dictionary can be for source: " + sourceName);
- }
- DefaultDictionary = dictionary;
- }
- }
- }
- }
- }
- protected virtual XmlLocalizationDictionary CreateXmlLocalizationDictionary(string xmlString)
- {
- return XmlLocalizationDictionary.BuildFomXmlString(xmlString);
- }
- }
- }
|