XmlFileLocalizationDictionaryProvider.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using System.IO;
  2. using Abp.Localization.Sources;
  3. namespace Abp.Localization.Dictionaries.Xml
  4. {
  5. /// <summary>
  6. /// Provides localization dictionaries from XML files in a directory.
  7. /// </summary>
  8. public class XmlFileLocalizationDictionaryProvider : LocalizationDictionaryProviderBase
  9. {
  10. private readonly string _directoryPath;
  11. /// <summary>
  12. /// Creates a new <see cref="XmlFileLocalizationDictionaryProvider"/>.
  13. /// </summary>
  14. /// <param name="directoryPath">Path of the dictionary that contains all related XML files</param>
  15. public XmlFileLocalizationDictionaryProvider(string directoryPath)
  16. {
  17. _directoryPath = directoryPath;
  18. }
  19. public override void Initialize(string sourceName)
  20. {
  21. var fileNames = Directory.GetFiles(_directoryPath, "*.xml", SearchOption.TopDirectoryOnly);
  22. foreach (var fileName in fileNames)
  23. {
  24. var dictionary = CreateXmlLocalizationDictionary(fileName);
  25. if (Dictionaries.ContainsKey(dictionary.CultureInfo.Name))
  26. {
  27. throw new AbpInitializationException(sourceName + " source contains more than one dictionary for the culture: " + dictionary.CultureInfo.Name);
  28. }
  29. Dictionaries[dictionary.CultureInfo.Name] = dictionary;
  30. if (fileName.EndsWith(sourceName + ".xml"))
  31. {
  32. if (DefaultDictionary != null)
  33. {
  34. throw new AbpInitializationException("Only one default localization dictionary can be for source: " + sourceName);
  35. }
  36. DefaultDictionary = dictionary;
  37. }
  38. }
  39. }
  40. protected virtual XmlLocalizationDictionary CreateXmlLocalizationDictionary(string fileName)
  41. {
  42. return XmlLocalizationDictionary.BuildFomFile(fileName);
  43. }
  44. }
  45. }