private static void Initialize() { /* * 在项目中,应该在"解决方案资源管理器"中设置文件的属性: * "复制到生成目录" 设置为 "始终复制" * "生成操作" 设置为 "无" */ string xmlFilePath = @"Localizations\Localization.xml"; var xmlDocument = XDocument.Load(xmlFilePath); var dictionaryFactory = new XmlLocalizationDictionaryFactory(xmlDocument); ILocalizationDictionary chinese = dictionaryFactory.CreateLocalizationDictionary("zh-CN"); ILocalizationDictionary english = dictionaryFactory.CreateLocalizationDictionary("en-US"); var mngr = new LocalizationDictionaryManager(); mngr.Add(chinese); mngr.Add(english); // 设置LocalizationUtility使用的字典管理器,此静态工具类通常在代码中使用 LocalizationUtility.SetLocalizationDictionaryManager(mngr); // 设置本地化wpf扩展标记使用的字典管理器,此设置仅作用于wpf界面,通常和上面的保持一致。 HelperLibrary.WPF.LocalizationExtension .LocalizationHelper.SetLocalizationDictionaryManager(mngr); }
private void ReadProcessingInstruction(XmlReader reader, ILocalizationDictionary dictionary) { if (reader.Name != "mios-localization") { return; } var attributes = AttributesPattern.Matches(reader.Value).Cast <Match>() .ToDictionary(t => t.Groups[1].Value, t => t.Groups[2].Value); string includePath; if (!attributes.TryGetValue("include", out includePath)) { return; } string prefix; attributes.TryGetValue("prefix", out prefix); var typedDictionary = dictionary as LocalizationDictionary; if (typedDictionary != null) { typedDictionary.Includes.Add( new LocalizationDictionary.Include { Path = includePath, Prefix = prefix } ); } if (!Recursive) { return; } ReadNestedDictionary(includePath, prefix, dictionary); }
/// <inheritdoc/> public virtual void Initialize(ILocalizationConfiguration configuration, IIocResolver iocResolver) { _configuration = configuration; if (_dictionaryProvider == null) { return; } var defaultProvided = false; foreach (var dictionaryInfo in _dictionaryProvider.GetDictionaries(Name)) { _dictionaries[dictionaryInfo.Dictionary.CultureInfo.Name] = dictionaryInfo.Dictionary; if (dictionaryInfo.IsDefault) { if (defaultProvided) { throw new AbpInitializationException("Only one default localization dictionary can be for source: " + Name); } _defaultDictionary = dictionaryInfo.Dictionary; defaultProvided = true; } } if (!defaultProvided) { throw new AbpInitializationException("There should be a default localization dictionary for source: " + Name); } }
public void Write(ILocalizationDictionary dictionary, TextWriter writer) { using (var xmlWriter = new XmlTextWriter(writer)) { xmlWriter.Formatting = Formatting.Indented; WriteDictionary(dictionary, xmlWriter); } }
public void Read(ILocalizationDictionary dictionary) { using (var stream = Resolver.Open(path)) { if (stream == null && ThrowWhenNotFound) { throw new FileNotFoundException(String.Format("Requested dictionary '{0}' could not be found", path), path); } if (stream == null) { return; } using (var reader = XmlReader.Create(stream)) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.ProcessingInstruction) { ReadProcessingInstruction(reader, dictionary); } else if (reader.NodeType == XmlNodeType.Element && reader.Name == "dictionary") { ReadPageElement(reader, dictionary); } } } } }
/// <inheritdoc/> public virtual void Initialize() { if (_dictionaryProvider == null) { return; } var defaultProvided = false; foreach (var dictionaryInfo in _dictionaryProvider.GetDictionaries(Name)) { _dictionaries[dictionaryInfo.Dictionary.CultureInfo.Name] = dictionaryInfo.Dictionary; if (dictionaryInfo.IsDefault) { if (defaultProvided) { throw new AbpInitializationException("Only one default localization dictionary can be for source: " + Name); } _defaultDictionary = dictionaryInfo.Dictionary; defaultProvided = true; } } if (!defaultProvided) { throw new AbpInitializationException("There should be a default localization dictionary for source: " + Name); } }
/// <summary> /// Adds a new dictionary to the source. /// </summary> /// <param name="dictionary">Dictionary to add</param> /// <param name="isDefault">Is this dictionary the default one? Default directory is used when requested string can not found in specified culture</param> public void AddDictionary(ILocalizationDictionary dictionary, bool isDefault = false) { _dictionaries[dictionary.CultureInfo.Name] = dictionary; if (isDefault) { _defaultDictionary = dictionary; } }
/// <summary> /// Adds a new dictionary to the source. /// </summary> /// <param name="dictionary">Dictionary to add</param> /// <param name="isDefault">Is this dictionary the default one? Default directory is used when requested string can not found in specified culture</param> public void AddDictionary(ILocalizationDictionary dictionary, bool isDefault = false) { _dictionaries[dictionary.CultureInfo.Name] = dictionary; if (isDefault) { _defaultDictionary = dictionary; } }
public void Read(ILocalizationDictionary dictionary) { if (path == null || !File.Exists(path)) { return; } Read(XDocument.Load(path), dictionary); }
/// <summary> /// 添加新的本地化字典,若对应的语言文化字典已存在则抛出异常。 /// </summary> /// <param name="dictionary">新的本地化字典</param> /// <exception cref="ArgumentNullException"></exception> public void Add(ILocalizationDictionary dictionary) { if (dictionary == null) { throw new ArgumentNullException("dictionary"); } dictionaries.Add(dictionary.CultureName, dictionary); }
private void ReadNestedDictionary(string path, string prefix, ILocalizationDictionary dictionary) { var combinedPath = Resolver.Combine(this.path, path); var nestedReader = new XmlLocalizationReader(combinedPath) { ThrowWhenNotFound = ThrowWhenNotFound, Resolver = Resolver, Prefix = Prefix + prefix }; nestedReader.Read(dictionary); }
public virtual ILocalizationDictionary Read(string sourceFile, ILocalizationDictionary dictionary) { if (!File.Exists(sourceFile)) { return(null); } using (var reader = new StreamReader(sourceFile)) { return(Read(reader, dictionary)); } }
public DefaultModularLocalizer(CultureInfo culture, ILocalizationManager localizationManager, ITenantShellManager tenantShellManager, Type localizer) { _localizationManager = localizationManager; _tenantShellManager = tenantShellManager; _localizer = localizer; var feature = _tenantShellManager.GetCurrentTenantShellContext().Blueprint.Dependencies[localizer]; _localizationDictionary = _localizationManager.GetDictionary(feature.FeatureInfo.Id, culture); }
private void ReadPageElement(XmlReader reader, ILocalizationDictionary dictionary) { if (!reader.ReadToDescendant("key")) { return; } do { ReadKeyElement(reader, dictionary); } while(reader.ReadToNextSibling("key")); }
private void ReadNestedDictionary(string path, string prefix, ILocalizationDictionary dictionary) { var combinedPath = Resolver.Combine(this.path, path); var nestedReader = new XmlLocalizationReader(combinedPath) { ThrowWhenNotFound = ThrowWhenNotFound, Resolver = Resolver, Prefix = Prefix + prefix }; nestedReader.Read(dictionary); }
public bool SetParentDictionary(ILocalizationDictionary parentDictionary) { if (parentDictionary == null) { return(false); } m_parentDictionary = parentDictionary; parentDictionary.SetChildDictionary(this); return(true); }
/// <summary> /// Initializes a new instance of the <see cref="MultiTenantLocalizationDictionary"/> class. /// </summary> public MultiTenantLocalizationDictionary( string sourceName, ILocalizationDictionary internalDictionary, IRepository<ApplicationLanguageText, long> customLocalizationRepository, ICacheManager cacheManager, IAbpSession session) { _sourceName = sourceName; _internalDictionary = internalDictionary; _customLocalizationRepository = customLocalizationRepository; _cacheManager = cacheManager; _session = session; }
/// <summary> /// Initializes a new instance of the <see cref="MultiTenantLocalizationDictionary"/> class. /// </summary> public MultiTenantLocalizationDictionary( string sourceName, ILocalizationDictionary internalDictionary, IRepository <ApplicationLanguageText, long> customLocalizationRepository, ICacheManager cacheManager, IAbpSession session) { _sourceName = sourceName; _internalDictionary = internalDictionary; _customLocalizationRepository = customLocalizationRepository; _cacheManager = cacheManager; _session = session; }
private static void WriteKey(string key, ILocalizationDictionary dictionary, XmlWriter writer) { writer.WriteStartElement("key"); writer.WriteAttributeString("id", key); foreach(var locale in dictionary.Locales) { var value = dictionary[locale, key]; if(value==null) continue; writer.WriteStartElement("val"); writer.WriteAttributeString("for", locale); writer.WriteCData(value); writer.WriteEndElement(); } writer.WriteEndElement(); }
private static void Read(XDocument document, ILocalizationDictionary dictionary) { var root = document.Root; if(root == null) throw new ArgumentException("Document does not contain required root element"); foreach(var keyElement in root.Elements("key")) { var attribute = keyElement.Attribute("id"); if(attribute==null) throw new ArgumentException("Element does not contain required 'id' attribute"); var id = attribute.Value; foreach(var entryElement in keyElement.Elements()) { var locale = entryElement.Name.LocalName; dictionary[FromCompressedLocale(locale), id] = entryElement.Value; } } }
private static void WriteDictionary(ILocalizationDictionary dictionary, XmlWriter writer) { writer.WriteStartDocument(); var typedDictionary = dictionary as LocalizationDictionary; if(typedDictionary!=null) { WriteIncludes(typedDictionary, writer); } writer.WriteStartElement("dictionary"); foreach(var key in dictionary.Keys) { WriteKey(key, dictionary, writer); } writer.WriteEndElement(); writer.WriteEndDocument(); }
protected virtual void Extend(ILocalizationDictionary dictionary) { var existingDictionary = Dictionaries.GetOrDefault(dictionary.CultureName); if (existingDictionary == null) { Dictionaries[dictionary.CultureName] = dictionary; } else { existingDictionary.Extend(dictionary); } }
public void Write(ILocalizationDictionary dictionary, TextWriter writer) { var document = new XDocument(); var root = new XElement("page"); document.Add(root); root.Add(dictionary.Keys .Select(key => { var e = new XElement("key"); e.Add(dictionary.Locales.Select(locale => new XElement(ToCompressedLocale(locale), dictionary[locale, key]))); e.SetAttributeValue("id", key); return e; })); document.Save(writer); }
private void ReadKeyElement(XmlReader reader, ILocalizationDictionary dictionary) { var id = reader.GetAttribute("id"); if(!reader.ReadToDescendant("val")) return; do { var locale = reader.GetAttribute("for"); if(locale==null) { throw new XmlLocalizationReaderException("Missing required attribute 'for' on element 'val'"); } if(reader.IsEmptyElement) continue; reader.MoveToContent(); var val = reader.ReadString(); dictionary[locale, Prefix+id] = val; } while(reader.ReadToNextSibling("val")); }
private void BuildDictionaryHierarchyTrees(IDictionary <string, ILocalizationDictionary> dictionaries, ILocalizationDictionary dictionary) { if (dictionary.Scope() == GlobalScope) { return; } var parentScope = string.IsNullOrEmpty(dictionary.GetParentScopeName()) ? dictionaries[GlobalScope] : dictionaries[dictionary.GetParentScopeName()]; dictionary.SetParentDictionary(parentScope); }
protected ILocalizationDictionary Read(IEnumerable <string> lines, ILocalizationDictionary dictionary) { string key = null, locale = null, value = null, whitespace = null; foreach (var line in lines) { if (line.TrimStart().StartsWith("#")) { // Comment } else if (line.TrimStart().StartsWith("@include")) { // Include command } else if (line.Trim() == String.Empty) { // Skip blank lines } else if (ParseMultilineValue(line, whitespace, ref value)) { if (key == null) { throw new Exception("Expected key before entry"); } if (locale == null) { throw new Exception("Expected entry before continuation"); } dictionary[locale, key] += Environment.NewLine + value; } else if (ParseValue(line, ref whitespace, ref locale, ref value)) { if (key == null) { throw new Exception("Expected key before entry"); } dictionary[locale, key] = value; } else if (ParseKey(line, ref key)) { // Key } else { throw new Exception("Unexpected line '" + line + "'"); } } return(dictionary); }
/// <summary> /// Initializes a new instance of the <see cref="MultiTenantLocalizationDictionary"/> class. /// </summary> public MultiTenantLocalizationDictionary( string sourceName, ILocalizationDictionary internalDictionary, IRepository <ApplicationLanguageText, long> customLocalizationRepository, ICacheManager cacheManager, IStudioXSession session, IUnitOfWorkManager unitOfWorkManager) { this.sourceName = sourceName; this.internalDictionary = internalDictionary; this.customLocalizationRepository = customLocalizationRepository; this.cacheManager = cacheManager; this.session = session; this.unitOfWorkManager = unitOfWorkManager; }
/// <summary> /// 获取指定语言文化的本地化词典。 /// </summary> /// <param name="cultureName">语言文化名称</param> /// <returns>如果对应的语言文化字典存在则返回该字典,否则返回null</returns> public ILocalizationDictionary Get(string cultureName) { if (cultureName == null) { throw new ArgumentNullException(nameof(cultureName)); } ILocalizationDictionary result = null; if (dictionaries.TryGetValue(cultureName, out result)) { return(result); } return(null); }
/// <summary> /// Initializes a new instance of the <see cref="MultiTenantLocalizationDictionary"/> class. /// </summary> public MultiTenantLocalizationDictionary( string sourceName, ILocalizationDictionary internalDictionary, IRepository <ApplicationLanguageText, long> customLocalizationRepository, ICacheManager cacheManager, IInfrastructureSession session, IUnitOfWorkManager unitOfWorkManager) { _sourceName = sourceName; _internalDictionary = internalDictionary; _customLocalizationRepository = customLocalizationRepository; _cacheManager = cacheManager; _session = session; _unitOfWorkManager = unitOfWorkManager; }
public void Write(ILocalizationDictionary dictionary, TextWriter writer) { var document = new XDocument(); var root = new XElement("page"); document.Add(root); root.Add(dictionary.Keys .Select(key => { var e = new XElement("key"); e.Add(dictionary.Locales.Select(locale => new XElement(ToCompressedLocale(locale), dictionary[locale, key]))); e.SetAttributeValue("id", key); return(e); })); document.Save(writer); }
public void Extend(ILocalizationDictionary dictionary) { //Add if (!Dictionaries.TryGetValue(dictionary.CultureInfo.Name, out ILocalizationDictionary existingDictionary)) { Dictionaries[dictionary.CultureInfo.Name] = dictionary; return; } //Override IReadOnlyList <LocalizedString> localizedStrings = dictionary.GetAllStrings(); foreach (LocalizedString localizedString in localizedStrings) { existingDictionary[localizedString.Name] = localizedString.Value; } }
/// <summary> /// Extends the source with given dictionary. /// </summary> /// <param name="dictionary">Dictionary to extend the source</param> public void Extend(ILocalizationDictionary dictionary) { //Add ILocalizationDictionary existingDictionary; if (!_dictionaries.TryGetValue(dictionary.CultureInfo.Name, out existingDictionary)) { _dictionaries[dictionary.CultureInfo.Name] = dictionary; return; } //Override var localizedStrings = dictionary.GetAllStrings(); foreach (var localizedString in localizedStrings) { existingDictionary[localizedString.Name] = localizedString.Value; } }
private static void WriteDictionary(ILocalizationDictionary dictionary, XmlWriter writer) { writer.WriteStartDocument(); var typedDictionary = dictionary as LocalizationDictionary; if (typedDictionary != null) { WriteIncludes(typedDictionary, writer); } writer.WriteStartElement("dictionary"); foreach (var key in dictionary.Keys) { WriteKey(key, dictionary, writer); } writer.WriteEndElement(); writer.WriteEndDocument(); }
/// <inheritdoc/> public IReadOnlyList <LocalizedString> GetAllStrings(CultureInfo culture, bool includeDefaults = true) { // TODO: Can be optimized (example: if it's already default dictionary, skip overriding) IDictionary <string, ILocalizationDictionary> dictionaries = DictionaryProvider.Dictionaries; //Create a temp dictionary to build var allStrings = new Dictionary <string, LocalizedString>(); if (includeDefaults) { //Fill all strings from default dictionary ILocalizationDictionary defaultDictionary = DictionaryProvider.DefaultDictionary; if (defaultDictionary != null) { foreach (LocalizedString defaultDictString in defaultDictionary.GetAllStrings()) { allStrings[defaultDictString.Name] = defaultDictString; } } //Overwrite all strings from the language based on country culture if (culture.Name.Contains("-")) { if (dictionaries.TryGetValue(GetBaseCultureName(culture.Name), out ILocalizationDictionary langDictionary)) { foreach (var langString in langDictionary.GetAllStrings()) { allStrings[langString.Name] = langString; } } } } //Overwrite all strings from the original dictionary if (!dictionaries.TryGetValue(culture.Name, out ILocalizationDictionary originalDictionary)) { return(allStrings.Values.ToImmutableList()); } foreach (LocalizedString originalLangString in originalDictionary.GetAllStrings()) { allStrings[originalLangString.Name] = originalLangString; } return(allStrings.Values.ToImmutableList()); }
private void AddDictionaryToHierarchyTreesWithoutBuildTree(ILocalizationDictionary dictionary) { m_dictionaries.Add(dictionary); if (!m_dictionariesPerCultureAndScope.Keys.Contains(dictionary.CultureInfo())) { throw new DictionaryLoadException(string.Format(UnknownCultureException, dictionary.CultureInfo(), dictionary.Scope())); } var dictionariesPerCulture = m_dictionariesPerCultureAndScope[dictionary.CultureInfo()]; dictionariesPerCulture.Add(dictionary.Scope(), dictionary); foreach (var scopeAlias in dictionary.ScopeAlias()) { dictionariesPerCulture.Add(scopeAlias, dictionary); } }
private static void WriteKey(string key, ILocalizationDictionary dictionary, XmlWriter writer) { writer.WriteStartElement("key"); writer.WriteAttributeString("id", key); foreach (var locale in dictionary.Locales) { var value = dictionary[locale, key]; if (value == null) { continue; } writer.WriteStartElement("val"); writer.WriteAttributeString("for", locale); writer.WriteCData(value); writer.WriteEndElement(); } writer.WriteEndElement(); }
public virtual void Extend(ILocalizationDictionary dictionary) { //Add ILocalizationDictionary existingDictionary; if (!_internalProvider.Dictionaries.TryGetValue(dictionary.CultureInfo.Name, out existingDictionary)) { _internalProvider.Dictionaries[dictionary.CultureInfo.Name] = dictionary; return; } //Override var localizedStrings = dictionary.GetAllStrings(); foreach (var localizedString in localizedStrings) { existingDictionary[localizedString.Name] = localizedString.Value; } }
private LocalizedString TranslateInParent(ILocalizationDictionary localizationDictionary, string text) { while (true) { if (localizationDictionary.ParentDictionary() == null) { return(null); } localizationDictionary = localizationDictionary.ParentDictionary(); localizationDictionary.List().TryGetValue(text, out var result); if (result != null) { return(result); } } }
private void ReadProcessingInstruction(XmlReader reader, ILocalizationDictionary dictionary) { if(reader.Name != "mios-localization") return; var attributes = AttributesPattern.Matches(reader.Value).Cast<Match>() .ToDictionary(t => t.Groups[1].Value, t => t.Groups[2].Value); string includePath; if(!attributes.TryGetValue("include", out includePath)) return; string prefix; attributes.TryGetValue("prefix", out prefix); var typedDictionary = dictionary as LocalizationDictionary; if(typedDictionary!=null) { typedDictionary.Includes.Add( new LocalizationDictionary.Include { Path = includePath, Prefix = prefix } ); } if(!Recursive) return; ReadNestedDictionary(includePath, prefix, dictionary); }
public void Read(ILocalizationDictionary dictionary) { using(var stream = Resolver.Open(path)) { if(stream==null && ThrowWhenNotFound) { throw new FileNotFoundException(String.Format("Requested dictionary '{0}' could not be found", path), path); } if(stream==null) { return; } using(var reader = XmlReader.Create(stream)) { while(reader.Read()) { if(reader.NodeType == XmlNodeType.ProcessingInstruction) { ReadProcessingInstruction(reader, dictionary); } else if(reader.NodeType == XmlNodeType.Element && reader.Name == "dictionary") { ReadPageElement(reader, dictionary); } } } } }
private static void Initialize() { /* * 在项目中,应该在"解决方案资源管理器"中设置文件的属性: * "复制到生成目录" 设置为 "始终复制" * "生成操作" 设置为 "无" */ string xmlFilePath = @"Localizations\Localization.xml"; var xmlDocument = XDocument.Load(xmlFilePath); var dictionaryFactory = new XmlLocalizationDictionaryFactory(xmlDocument); ILocalizationDictionary chinese = dictionaryFactory.CreateLocalizationDictionary("zh-CN"); ILocalizationDictionary english = dictionaryFactory.CreateLocalizationDictionary("en-US"); var mngr = new LocalizationDictionaryManager(); mngr.Add(chinese); mngr.Add(english); LocalizationUtility.SetLocalizationDictionaryManager(mngr); }
public string GetStringOrNull(string name, CultureInfo culture, bool tryDefaults = true) { string cultureName = culture.Name; IDictionary <string, ILocalizationDictionary> dictionaries = DictionaryProvider.Dictionaries; //Try to get from original dictionary (with country code) if (dictionaries.TryGetValue(cultureName, out ILocalizationDictionary originalDictionary)) { LocalizedString strOriginal = originalDictionary.GetOrNull(name); if (strOriginal != null) { return(strOriginal.Value); } } if (!tryDefaults) { return(null); } //Try to get from same language dictionary (without country code) if (cultureName.Contains("-")) //Example: "tr-TR" (length=5) { if (dictionaries.TryGetValue(GetBaseCultureName(cultureName), out ILocalizationDictionary langDictionary)) { LocalizedString strLang = langDictionary.GetOrNull(name); if (strLang != null) { return(strLang.Value); } } } //Try to get from default language ILocalizationDictionary defaultDictionary = DictionaryProvider.DefaultDictionary; LocalizedString strDefault = defaultDictionary?.GetOrNull(name); return(strDefault?.Value); }
protected ILocalizationDictionary Read(IEnumerable<string> lines, ILocalizationDictionary dictionary) { string key = null, locale = null, value = null, whitespace = null; foreach(var line in lines) { if(line.TrimStart().StartsWith("#")) { // Comment } else if(line.TrimStart().StartsWith("@include")) { // Include command } else if(line.Trim()==String.Empty) { // Skip blank lines } else if(ParseMultilineValue(line, whitespace, ref value)) { if(key == null) throw new Exception("Expected key before entry"); if(locale == null) throw new Exception("Expected entry before continuation"); dictionary[locale,key] += Environment.NewLine+value; } else if(ParseValue(line, ref whitespace, ref locale, ref value)) { if(key == null) throw new Exception("Expected key before entry"); dictionary[locale,key] = value; } else if(ParseKey(line, ref key)) { // Key } else { throw new Exception("Unexpected line '"+line+"'"); } } return dictionary; }
private void ReadPageElement(XmlReader reader, ILocalizationDictionary dictionary) { if(!reader.ReadToDescendant("key")) return; do { ReadKeyElement(reader,dictionary); } while(reader.ReadToNextSibling("key")); }
/// <summary> /// Creates a new instance of <see cref="LocalizationDictionaryInfo"/>. /// </summary> /// <param name="dictionary">Reference to the dictionary</param> /// <param name="isDefault">Is this dictionary the default language</param> public LocalizationDictionaryInfo(ILocalizationDictionary dictionary, bool isDefault = false) { Dictionary = dictionary; IsDefault = isDefault; }
public override void Extend(ILocalizationDictionary dictionary) { DictionaryProvider.Extend(dictionary); }
public void Write(ILocalizationDictionary dictionary, string path) { using(var writer = new StreamWriter(path)) { Write(dictionary, writer); } }
/// <summary> /// Extends the source with given dictionary. /// </summary> /// <param name="dictionary">Dictionary to extend the source</param> public virtual void Extend(ILocalizationDictionary dictionary) { DictionaryProvider.Extend(dictionary); }
public virtual ILocalizationDictionary Read(TextReader reader, ILocalizationDictionary dictionary) { return Read(ReadLines(reader),dictionary); }
public void Write(ILocalizationDictionary dictionary, TextWriter writer) { using(var xmlWriter = new XmlTextWriter(writer)) { xmlWriter.Formatting = Formatting.Indented; WriteDictionary(dictionary, xmlWriter); } }
public void Read(ILocalizationDictionary dictionary) { if(path==null || !File.Exists(path)) return; Read(XDocument.Load(path), dictionary); }
public void Read(TextReader reader, ILocalizationDictionary dictionary) { Read(XDocument.Load(reader), dictionary); }
public virtual ILocalizationDictionary Read(string sourceFile, ILocalizationDictionary dictionary) { if(!File.Exists(sourceFile)) return null; using(var reader = new StreamReader(sourceFile)) { return Read(reader,dictionary); } }