Esempio n. 1
0
        /// <summary>
        /// Register translation package
        /// </summary>
        /// <param name="translatePackage"></param>
        void ITranslationManSetter.RegisterPackage(ITranslatePackage translatePackage)
        {
            if (translatePackage == null)
            {
                return;
            }

            if (translatePackage.IsAnonymous)
            {
                var left  = _translatePackages[_hashOfAnonymousPackageKey];
                var right = translatePackage;
                TranslatePackageMerger.Merge(left, right, MergeLevel.Level_2);
                return;
            }

            if (Contains(translatePackage.PackageKey))
            {
                return;
            }

            lock (_translateLockObj) {
                if (Contains(translatePackage.PackageKey))
                {
                    return;
                }

                _translatePackages.Add(translatePackage.PackageKey.GetHashCode(), translatePackage);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Merge
        /// </summary>
        /// <param name="source">源 Translation Package,将合并到此包内</param>
        /// <param name="other">需要合并的素材 Translation Package,合并后此包将抛弃</param>
        /// <param name="level">合并级别</param>
        /// <param name="customMergeProvider">自定义合并方法提供者程序</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        public static ITranslatePackage Merge(
            ITranslatePackage source,
            ITranslatePackage other,
            MergeLevel level = MergeLevel.Level_1,
            Func <ITranslatePackageMergeOps, ITranslatePackageMergeOps, ITranslatePackage> customMergeProvider = null)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            if (other == null)
            {
                throw new ArgumentNullException(nameof(other));
            }

            var left  = source as ITranslatePackageMergeOps;
            var right = other as ITranslatePackageMergeOps;

            if (left == null)
            {
                throw new ArgumentException($"The source translate package should be an implementation of '{nameof(ITranslatePackageMergeOps)}'");
            }

            if (right == null)
            {
                throw new ArgumentException($"The target translate package should be an implementation of '{nameof(ITranslatePackageMergeOps)}'");
            }

            var ret = source;

            switch (level)
            {
            case MergeLevel.Level_1:
                MergeInLevel1(left, right);
                break;

            case MergeLevel.Level_2:
                MergeInLevel2(left, right);
                break;

            case MergeLevel.Custom:
                if (customMergeProvider == null)
                {
                    throw new ArgumentNullException(nameof(customMergeProvider));
                }
                ret = customMergeProvider(left, right);
                break;
            }

            return(ret);
        }
Esempio n. 3
0
        /// <summary>
        /// Add translation package
        /// </summary>
        /// <param name="package"></param>
        /// <param name="level"></param>
        /// <param name="customMergeProvider"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        public I18NOptions AddPackage(ITranslatePackage package, MergeLevel level = MergeLevel.Level_1,
                                      Func <ITranslatePackageMergeOps, ITranslatePackageMergeOps, ITranslatePackage> customMergeProvider = null)
        {
            if (package == null)
            {
                throw new ArgumentNullException(nameof(package));
            }
            lock (__lock_package) {
                var hashOfPackageKey = package.PackageKey.GetHashCode();
                if (__translationPackages.TryGetValue(hashOfPackageKey, out var packageInstance))
                {
                    var template = TranslatePackageMerger.Merge(packageInstance, package, level, customMergeProvider);
                    __translationPackages[hashOfPackageKey] = template;
                }
                else
                {
                    AddPackageInternal(package);
                }
            }

            return(this);
        }
Esempio n. 4
0
 private void AddPackageInternal(ITranslatePackage package)
 {
     __translationPackages.Add(package.PackageKey.GetHashCode(), package);
 }