/// <summary>
        /// Initializes a new instance of the <see cref="ResourceLanguage" /> class.
        /// </summary>
        /// <param name="container">The containing resource entity.</param>
        /// <param name="cultureKey">The culture key.</param>
        /// <param name="file">The .resx file having all the localization.</param>
        /// <exception cref="System.InvalidOperationException">
        /// </exception>
        internal ResourceLanguage([NotNull] ResourceEntity container, [NotNull] CultureKey cultureKey, [NotNull] ProjectFile file)
        {
            Contract.Requires(container != null);
            Contract.Requires(cultureKey != null);
            Contract.Requires(file != null);

            _container     = container;
            _cultureKey    = cultureKey;
            _file          = file;
            _configuration = container.Container.Configuration;

            try
            {
                _document = file.Load();
            }
            catch (XmlException ex)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Resources.InvalidResourceFileError, file.FilePath), ex);
            }

            if (_documentRoot == null)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Resources.InvalidResourceFileError, file.FilePath));
            }

            var defaultNamespace = _documentRoot.GetDefaultNamespace();

            _dataNodeName    = defaultNamespace.GetName(@"data");
            _valueNodeName   = defaultNamespace.GetName(@"value");
            _commentNodeName = defaultNamespace.GetName(@"comment");

            UpdateNodes();
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ResourceLanguage" /> class.
        /// </summary>
        /// <param name="container">The containing resource entity.</param>
        /// <param name="cultureKey">The culture key.</param>
        /// <param name="file">The .resx file having all the localization.</param>
        /// <exception cref="System.InvalidOperationException">
        /// </exception>
        internal ResourceLanguage(ResourceEntity container, CultureKey cultureKey, ProjectFile file)
        {
            Contract.Requires(container != null);
            Contract.Requires(cultureKey != null);
            Contract.Requires(file != null);

            _container       = container;
            _resourceManager = container.Container;
            _cultureKey      = cultureKey;
            _file            = file;

            try
            {
                _document     = file.Load();
                _documentRoot = _document.Root;
            }
            catch (XmlException ex)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Resources.InvalidResourceFileError, file.FilePath), ex);
            }

            if (_documentRoot == null)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Resources.InvalidResourceFileError, file.FilePath));
            }

            var defaultNamespace = _documentRoot.GetDefaultNamespace();

            _dataNodeName    = defaultNamespace.GetName(@"data");
            _valueNodeName   = defaultNamespace.GetName(@"value");
            _commentNodeName = defaultNamespace.GetName(@"comment");

            var data = _documentRoot.Elements(_dataNodeName);

            var elements = data
                           .Where(IsStringType)
                           .Select(item => new Node(this, item))
                           .Where(item => !item.Key.StartsWith(WinFormsMemberNamePrefix, StringComparison.OrdinalIgnoreCase))
                           .ToArray();

            if (_resourceManager.Configuration.DuplicateKeyHandling == DuplicateKeyHandling.Rename)
            {
                MakeKeysUnique(elements);
            }

            try
            {
                _nodes = elements.ToDictionary(item => item.Key);
            }
            catch (ArgumentException ex)
            {
                var duplicateKeys = string.Join(@", ", elements.GroupBy(item => item.Key).Where(group => group.Count() > 1).Select(group => Quote + group.Key + Quote));
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Resources.DuplicateKeyError, file.FilePath, duplicateKeys), ex);
            }
        }