Esempio n. 1
0
        /// <summary>
        /// Add resource
        /// </summary>
        /// <param name="resource"></param>
        public void AddResource(ITranslateResource resource)
        {
            if (resource == null)
            {
                return;
            }

            if (resource.IsAnonymous)
            {
                if (!IsAnonymous)
                {
                    throw new InvalidOperationException("Anonymous translate resource cannot be added into non-anonymous package.");
                }

                AddAnonymousResource(resource);
                return;
            }

            if (IsAnonymous)
            {
                throw new InvalidOperationException("Anonymous translate package can only be added anonymous resource.");
            }

            if (_resources.ContainsKey(resource.Binding))
            {
                return;
            }

            AddResourceCore(resource);
        }
Esempio n. 2
0
        internal bool HasResource(ITranslateResource resource)
        {
            if (resource == null)
            {
                return(false);
            }

            return(HasResource(resource.Binding));
        }
Esempio n. 3
0
        private void AddResourceCore(ITranslateResource resource)
        {
            if (resource == null)
            {
                return;
            }

            lock (_resourceLockObj) {
                if (_resources.ContainsKey(resource.Binding))
                {
                    return;
                }

                if (TryRegisterLanguageTagOnceAgain(resource.Binding))
                {
                    _resources.Add(resource.Binding, resource);
                    _usedLanguageTags.Add(resource.Binding);
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Add anonymous translation resource
        /// </summary>
        /// <param name="resource"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="ArgumentException"></exception>
        public I18NOptions AddAnonymousResource(ITranslateResource resource)
        {
            if (resource == null)
            {
                throw new ArgumentNullException(nameof(resource));
            }
            if (!resource.IsAnonymous)
            {
                throw new ArgumentException($"Non-anonymous translation resource should use method '{nameof(AddResource)}'.");
            }

            lock (__lock_resource) {
                if (TryRegisterLanguageTagOnce(resource.Binding))
                {
                    var anonymousPackage = __translationPackages[TranslationManager.HashOfAnonymousPackageKey];
                    anonymousPackage.AddResource(resource);
                }
            }

            return(this);
        }
Esempio n. 5
0
        /// <summary>
        /// Add translation resource
        /// </summary>
        /// <param name="packageKey"></param>
        /// <param name="resource"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="InvalidOperationException"></exception>
        public I18NOptions AddResource(string packageKey, ITranslateResource resource)
        {
            if (resource == null)
            {
                throw new ArgumentNullException(nameof(resource));
            }
            if (string.IsNullOrWhiteSpace(packageKey))
            {
                throw new ArgumentNullException(nameof(packageKey));
            }
            if (resource.IsAnonymous)
            {
                throw new ArgumentException($"Anonymous translation resource should use method '{nameof(AddAnonymousResource)}'.");
            }

            lock (__lock_resource) {
                var hashOfPackageKey = packageKey.GetHashCode();
                if (TryRegisterLanguageTagOnce(resource.Binding))
                {
                    if (__translationPackages.TryGetValue(hashOfPackageKey, out var package))
                    {
                        package.AddResource(resource);
                    }
                    else
                    {
                        var future = new TranslatePackage(packageKey, _fallbackExperimenter);
                        future.AddResource(resource);
                        AddPackageInternal(future);
                    }
                }
                else
                {
                    throw new InvalidOperationException($"Something broken when add new resource '{resource.Name}'.");
                }
            }

            return(this);
        }
Esempio n. 6
0
        private void AddAnonymousResource(ITranslateResource resource)
        {
            var ops = (ITranslatePackageMergeOps)this;

            ops.Merge(resource, TranslatePackageMerger.AnonymousMergeCoreFunc(resource));
        }
Esempio n. 7
0
 /// <summary>
 /// Core Merge 1
 /// 当 resource 为 null 时,表示 TranslatePackage 内不包含该 LanguageTag 的资源,此时直接返回 Other TranslateResource (1)
 /// 当 resource 不为 null,表示 TranslatePackage 内包含该 LanguageTag 的资源,此时直接跳过,并原样返回 resource (2)
 /// </summary>
 /// <param name="otherResource"></param>
 /// <returns></returns>
 private static Func <ITranslateResourceMergeOps, (bool, ITranslateResource)> MergeLevel1CoreFunc(ITranslateResource otherResource) => resource => {
Esempio n. 8
0
 /// <summary>
 /// Merge
 /// </summary>
 /// <param name="other"></param>
 /// <param name="sourceMergeFunc"></param>
 void ITranslatePackageMergeOps.Merge(ITranslateResource other,
                                      Func <ITranslateResourceMergeOps, (bool, ITranslateResource)> sourceMergeFunc)