Ejemplo n.º 1
0
        /// <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>
        /// <param name="duplicateKeyHandling">The duplicate key handling.</param>
        /// <exception cref="InvalidOperationException">
        /// </exception>
        /// <exception cref="System.InvalidOperationException"></exception>
        internal ResourceLanguage(ResourceEntity container, CultureKey cultureKey, ProjectFile file, DuplicateKeyHandling duplicateKeyHandling)
        {
            Container      = container;
            CultureKey     = cultureKey;
            ProjectFile    = 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(duplicateKeyHandling);
        }
        /// <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();
        }
Ejemplo n.º 3
0
 internal void LanguageAdded([NotNull] CultureKey cultureKey)
 {
     if (!Cultures.Contains(cultureKey))
     {
         Cultures.Add(cultureKey);
     }
 }
        public ResourceBeginEditingEventArgs(ResourceEntity entity, CultureKey cultureKey)
        {
            Contract.Requires(entity != null);

            _entity     = entity;
            _cultureKey = cultureKey;
        }
Ejemplo n.º 5
0
 internal void LanguageAdded(CultureKey cultureKey)
 {
     if (!_cultureKeys.Contains(cultureKey))
     {
         _cultureKeys.Add(cultureKey);
     }
 }
Ejemplo n.º 6
0
        protected LanguageColumnHeaderBase([NotNull] Configuration configuration, [NotNull] CultureKey cultureKey)
        {
            Contract.Requires(configuration != null);
            Contract.Requires(cultureKey != null);

            _configuration = configuration;
            _cultureKey    = cultureKey;
        }
        protected LanguageColumnHeaderBase(ResourceManager resourceManager, CultureKey cultureKey)
        {
            Contract.Requires(resourceManager != null);
            Contract.Requires(cultureKey != null);

            _resourceManager = resourceManager;
            _cultureKey      = cultureKey;
        }
Ejemplo n.º 8
0
        private static IEnumerable <string> GetTableLanguageColumnHeaders([NotNull] this CultureKey cultureKey)
        {
            var cultureName = cultureKey.ToString();

            yield return(CommentHeaderPrefix + cultureName);

            yield return(cultureName);
        }
        public TranslationItem([NotNull] ResourceTableEntry entry, [NotNull] string source, [NotNull] CultureKey targetCulture)
        {
            _entry = entry;
            Source = source;

            TargetCulture = targetCulture;
            _results.CollectionChanged += (_, __) => OnPropertyChanged(() => Translation);
        }
Ejemplo n.º 10
0
        internal void LanguageAdded([NotNull] CultureKey cultureKey)
        {
            Contract.Requires(cultureKey != null);

            if (!_cultureKeys.Contains(cultureKey))
            {
                _cultureKeys.Add(cultureKey);
            }
        }
Ejemplo n.º 11
0
        public static void CreateNewLanguageColumn(this DataGrid dataGrid, Configuration configuration, CultureInfo?culture)
        {
            var cultureKey = new CultureKey(culture);

            dataGrid.AddLanguageColumn(configuration, cultureKey);

            var key = cultureKey.ToString(NeutralCultureKeyString);

            HiddenLanguageColumns = HiddenLanguageColumns.Where(col => !string.Equals(col, key, StringComparison.OrdinalIgnoreCase));
        }
        /// <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);
            }
        }
Ejemplo n.º 13
0
        public TranslationItem([NotNull] ResourceTableEntry entry, [NotNull] string source, [NotNull] CultureKey targetCulture)
        {
            Contract.Requires(entry != null);
            Contract.Requires(source != null);
            Contract.Requires(targetCulture != null);

            _entry  = entry;
            _source = source;

            _targetCulture              = targetCulture;
            _results.CollectionChanged += (_, __) => OnPropertyChanged(() => Translation);
        }
Ejemplo n.º 14
0
        private bool CanEdit([NotNull] ResourceEntity entity, [CanBeNull] CultureKey cultureKey)
        {
            Contract.Requires(entity != null);

            if (cultureKey == null)
            {
                return(true);
            }

            var rootFolder = _sourceFilesProvider.Folder;

            if (string.IsNullOrEmpty(rootFolder))
            {
                return(false);
            }

            var language = entity.Languages.FirstOrDefault(lang => cultureKey.Equals(lang.CultureKey));

            if (language != null)
            {
                return(true);
            }

            var culture = cultureKey.Culture;

            if (culture == null)
            {
                return(false); // no neutral culture => this should never happen.
            }
            var neutralLanguage = entity.Languages.FirstOrDefault();

            if (neutralLanguage == null)
            {
                return(false);
            }

            var languageFileName = neutralLanguage.ProjectFile.GetLanguageFileName(culture);

            if (!File.Exists(languageFileName))
            {
                var directoryName = Path.GetDirectoryName(languageFileName);
                if (!string.IsNullOrEmpty(directoryName))
                {
                    Directory.CreateDirectory(directoryName);
                }

                File.WriteAllText(languageFileName, Resources.EmptyResxTemplate);
            }

            entity.AddLanguage(new ProjectFile(languageFileName, rootFolder, entity.ProjectName, null));

            return(true);
        }
        public static void CreateNewLanguageColumn([NotNull] this DataGrid dataGrid, [NotNull] Configuration configuration, [CanBeNull] CultureInfo culture)
        {
            Contract.Requires(dataGrid != null);
            Contract.Requires(configuration != null);

            var cultureKey = new CultureKey(culture);

            dataGrid.AddLanguageColumn(configuration, cultureKey);

            var key = cultureKey.ToString(NeutralCultureKeyString);

            HiddenLanguageColumns = HiddenLanguageColumns.Where(col => !string.Equals(col, key, StringComparison.OrdinalIgnoreCase));
        }
        private bool IsSnapshotDifferent(CultureKey culture)
        {
            Contract.Requires(culture != null);
            Contract.Requires(_snapshot != null);

            var snapshotValue = _snapshot.GetValueOrDefault(culture).Maybe().Return(x => x.Text) ?? string.Empty;
            var currentValue  = _values.GetValue(culture) ?? string.Empty;

            var snapshotComment = _snapshot.GetValueOrDefault(culture).Maybe().Return(x => x.Comment) ?? string.Empty;
            var currentComment  = _comments.GetValue(culture) ?? string.Empty;

            return(!string.Equals(snapshotValue, currentValue) || !string.Equals(snapshotComment, currentComment));
        }
        public static void CreateNewLanguageColumn(this DataGrid dataGrid, ResourceManager resourceManager, CultureInfo culture)
        {
            Contract.Requires(dataGrid != null);
            Contract.Requires(resourceManager != null);

            var cultureKey = new CultureKey(culture);

            AddLanguageColumn(dataGrid, resourceManager, cultureKey);

            var key = cultureKey.ToString(NeutralCultureKeyString);

            HiddenLanguageColumns = HiddenLanguageColumns.Where(col => !string.Equals(col, key, StringComparison.OrdinalIgnoreCase));
        }
Ejemplo n.º 18
0
        private static IEnumerable <string> GetLanguageColumnHeaders([NotNull] this CultureKey language, [CanBeNull] IResourceScope scope)
        {
            var cultureKeyName = language.ToString();

            if ((scope == null) || scope.Comments.Contains(language))
            {
                yield return(CommentHeaderPrefix + cultureKeyName);
            }

            if ((scope == null) || scope.Languages.Contains(language))
            {
                yield return(cultureKeyName);
            }
        }
Ejemplo n.º 19
0
        public bool CanEdit([NotNull] ResourceEntity resourceEntity, CultureKey cultureKey)
        {
            Contract.Requires(resourceEntity != null);

            var eventHandler = BeginEditing;

            if (eventHandler == null)
                return true;

            var args = new ResourceBeginEditingEventArgs(resourceEntity, cultureKey);

            eventHandler(this, args);

            return !args.Cancel;
        }
Ejemplo n.º 20
0
        public TranslationItem(ResourceTableEntry entry, string source, CultureKey targetCulture)
        {
            Contract.Requires(entry != null);
            Contract.Requires(source != null);
            Contract.Requires(targetCulture != null);

            Entry  = entry;
            Source = source;

            _targetCulture              = targetCulture;
            _results.CollectionChanged += (_, __) => OnPropertyChanged(() => Translation);
            _orderedResults             = new ListCollectionView(_results);
            _orderedResults.SortDescriptions.Add(new SortDescription("Rating", ListSortDirection.Descending));
            _orderedResults.SortDescriptions.Add(new SortDescription("Translator.DisplayName", ListSortDirection.Ascending));
        }
Ejemplo n.º 21
0
        public bool CanEdit([NotNull] ResourceEntity resourceEntity, [CanBeNull] CultureKey cultureKey)
        {
            var eventHandler = BeginEditing;

            if (eventHandler == null)
            {
                return(true);
            }

            var args = new ResourceBeginEditingEventArgs(resourceEntity, cultureKey);

            eventHandler(this, args);

            return(!args.Cancel);
        }
        public T GetValue(CultureKey cultureKey)
        {
            Contract.Requires(cultureKey != null);

            ResourceLanguage language;

            if (!_languages.TryGetValue(cultureKey, out language))
            {
                return(default(T));
            }

            Contract.Assume(language != null);

            return(_getter(language));
        }
        public T GetValue(object culture)
        {
            var cultureKey = CultureKey.Parse(culture);

            ResourceLanguage language;

            if (!_languages.TryGetValue(cultureKey, out language))
            {
                return(default(T));
            }

            Contract.Assume(language != null);

            return(_getter(language));
        }
        private static IEnumerable <CultureKey> CastLanguages(object languages)
        {
            var obj = languages.PsObjectCast <object>();

            switch (obj)
            {
            case string str:
                return(new[] { CultureKey.Parse(str) });

            case IEnumerable enumerable:
                return(enumerable.PsCast <object>().Select(CultureKey.Parse).ToArray());

            default:
                return(new[] { CultureKey.Parse(obj.PsObjectCast <object>()) });
            }
        }
        private static IEnumerable <string> GetLanguageColumnHeaders(this CultureKey language, IResourceScope scope)
        {
            Contract.Requires(language != null);

            var cultureKeyName = language.ToString();

            if ((scope == null) || scope.Comments.Contains(language))
            {
                yield return(CommentHeaderPrefix + cultureKeyName);
            }

            if ((scope == null) || scope.Languages.Contains(language))
            {
                yield return(cultureKeyName);
            }
        }
Ejemplo n.º 26
0
        private static string?GetEntryData(this ResourceTableEntry entry, CultureKey culture, ColumnKind columnKind)
        {
            var snapshot = entry.Snapshot;

            if (snapshot != null)
            {
                if (!snapshot.TryGetValue(culture, out var data) || (data == null))
                {
                    return(null);
                }

                return(columnKind switch
                {
                    ColumnKind.Text => data.Text,
                    ColumnKind.Comment => data.Comment,
                    _ => throw new InvalidOperationException("Invalid Column Kind")
                });
        private bool IsSnapshotDifferent([NotNull] CultureKey culture)
        {
            Contract.Requires(culture != null);

            if (_snapshot == null)
            {
                return(false);
            }

            var snapshotValue = _snapshot.GetValueOrDefault(culture)?.Text ?? string.Empty;
            var currentValue  = _values.GetValue(culture) ?? string.Empty;

            var snapshotComment = _snapshot.GetValueOrDefault(culture)?.Comment ?? string.Empty;
            var currentComment  = _comments.GetValue(culture) ?? string.Empty;

            return(!string.Equals(snapshotValue, currentValue) || !string.Equals(snapshotComment, currentComment));
        }
        public bool SetValue(CultureKey cultureKey, T value)
        {
            Contract.Requires(cultureKey != null);

            ResourceLanguage language;

            if (!_languages.TryGetValue(cultureKey, out language))
            {
                throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Resources.LanguageNotDefinedError, cultureKey.Culture));
            }

            if (!_setter(language, value))
            {
                return(false);
            }

            OnValueChanged();
            return(true);
        }
        public bool SetValue(object culture, T value)
        {
            var cultureKey = CultureKey.Parse(culture);

            ResourceLanguage language;

            if (!_languages.TryGetValue(cultureKey, out language))
            {
                throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Resources.LanguageNotDefinedError, cultureKey.Culture));
            }

            if (!_setter(language, value))
            {
                return(false);
            }

            OnValueChanged();
            return(true);
        }
Ejemplo n.º 30
0
        private static IEnumerable <CultureKey> CastLanguages(object languages)
        {
            IEnumerable <CultureKey> resourceLanguages = null;

            switch (languages.PsObjectCast <object>())
            {
            case string str:
                resourceLanguages = new[] { CultureKey.Parse(str) };
                break;

            case IEnumerable enumerable:
                resourceLanguages = enumerable.PsCast <object>().Select(CultureKey.Parse).ToArray();
                break;

            case object obj:
                resourceLanguages = new[] { CultureKey.Parse(obj.PsObjectCast <object>()) };
                break;
            }

            return(resourceLanguages);
        }