Exemplo n.º 1
0
        /// <summary>
        /// Create translate resource
        /// </summary>
        /// <param name="template"></param>
        /// <typeparam name="TTemplate"></typeparam>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        public static ITranslateResource Create <TTemplate>(TTemplate template) where TTemplate : StandardLocalizationTemplate, ILocalizationTemplate, new()
        {
            if (template == null)
            {
                throw new ArgumentNullException(nameof(template));
            }

            var anonymousTemplate = template.IsAnonymousTemplate();

            if (!anonymousTemplate && string.IsNullOrWhiteSpace(template.Name))
            {
                throw new ArgumentNullException(nameof(template.Name));
            }

            var languageTag = LanguageTagManager.Create(template.Language);

            if (languageTag == null)
            {
                throw new ArgumentException($"Cannot resolve an instance of LanguageTag by '{template.Language}'.");
            }

            return(anonymousTemplate
                ? new TranslateResource(
                       languageTag,
                       TranslationManager.ANONYMOUS_RESOURCE_NAME,
                       template.Contents.ToDictionary(k => k.Key.GetHashCode(), v => v.Value))
                : new TranslateResource(
                       languageTag,
                       template.Name,
                       template.Contents.ToDictionary(k => k.Key.GetHashCode(), v => v.Value)));
        }
Exemplo n.º 2
0
 private void MatchTagHelper1(
     int expected,
     string lhs,
     string rhs,
     MatchLevel matchLevel = MatchLevel.LanguageMatch)
 {
     Assert.Equal(expected, (LanguageTagManager.Create(lhs).Match(LanguageTagManager.Create(rhs), matchLevel)));
     Assert.Equal(expected, (LanguageTagManager.Create(rhs).Match(LanguageTagManager.Create(lhs), matchLevel)));
 }
Exemplo n.º 3
0
        internal bool HasResource(string languageTag)
        {
            if (string.IsNullOrWhiteSpace(languageTag))
            {
                return(false);
            }

            var languageTagInstance = LanguageTagManager.Get(languageTag);

            return(HasResource(languageTagInstance));
        }
Exemplo n.º 4
0
        /// <summary>
        /// Get resource by given language tag
        /// </summary>
        /// <param name="languageTag"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentException"></exception>
        public ITranslateResource GetResource(string languageTag)
        {
            if (string.IsNullOrWhiteSpace(languageTag))
            {
                return(null);
            }

            // ReSharper disable once InconsistentlySynchronizedField
            if (_langAndResourceMapCache.TryGetValue(languageTag, out var resource))
            {
                return(resource);
            }

            var languageTagInstance = LanguageTagManager.Get(languageTag);

            if (languageTagInstance == null)
            {
                throw new ArgumentException($"Cannot resolve an instance of LanguageTag by '{languageTag}'.");
            }

            if (_resources.TryGetValue(languageTagInstance, out resource))
            {
                return(resource);
            }

            var suitableTags = _fallbackExperimenter.GetSuitableTags(languageTagInstance).ToList();

            if (!suitableTags.Any())
            {
                throw new ArgumentException($"Cannot resolve a suitable LanguageTag by '{languageTag}'.");
            }

            var theMostSuitableTag = suitableTags.First();

            if (_resources.TryGetValue(theMostSuitableTag, out resource))
            {
                return(CacheAndReturn(languageTag, resource));
            }

            throw new ArgumentException($"Cannot resolve the resource by the given LanguageTag '{languageTag}'");
        }
Exemplo n.º 5
0
        /// <summary>
        /// Create Anonymous Localization Translate resource
        /// </summary>
        /// <param name="template"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="InvalidOperationException"></exception>
        /// <exception cref="ArgumentException"></exception>
        public static ITranslateResource Create(AnonymousLocalizationTemplate template)
        {
            if (template == null)
            {
                throw new ArgumentNullException(nameof(template));
            }

            if (!template.CheckMySelf())
            {
                throw new InvalidOperationException("The AnonymousLocalizationTemplate has been illegally tampered with.");
            }

            var languageTag = LanguageTagManager.Create(template.Language);

            if (languageTag == null)
            {
                throw new ArgumentException($"Cannot resolve an instance of LanguageTag by '{template.Language}'.");
            }

            return(new TranslateResource(
                       languageTag,
                       TranslationManager.ANONYMOUS_RESOURCE_NAME,
                       template.Contents.ToDictionary(k => k.Key.GetHashCode(), v => v.Value)));
        }
Exemplo n.º 6
0
 /// <summary>
 /// Create a new instance of <see cref="Text"/>.
 /// </summary>
 /// <param name="text"></param>
 /// <param name="packageKey"></param>
 /// <param name="languageTag"></param>
 /// <param name="parameters"></param>
 public Text(string text, string packageKey, string languageTag, params object[] parameters)
     : this(text, packageKey, LanguageTagManager.Get(languageTag), parameters)
 {
 }
Exemplo n.º 7
0
 /// <summary>
 /// Create a new instance of <see cref="Text"/>.
 /// </summary>
 /// <param name="processor"></param>
 /// <param name="text"></param>
 /// <param name="packageKey"></param>
 /// <param name="languageTag"></param>
 /// <param name="parameters"></param>
 public Text(TranslationProcessor processor, string text, string packageKey, string languageTag, params object[] parameters)
     : this(processor, text, packageKey, LanguageTagManager.Get(languageTag), parameters)
 {
 }
 /// <summary>
 /// Translate in anonymous
 /// </summary>
 /// <param name="languageTag"></param>
 /// <param name="resourceKey"></param>
 /// <param name="strategy"></param>
 /// <returns></returns>
 public virtual string AnonymousTranslate(string languageTag, string resourceKey, AttemptStrategy strategy = AttemptStrategy.Fallback)
 {
     return(LanguageTagManager.TryGet(languageTag, out var languageTagInstance)
         ? AnonymousTranslate(languageTagInstance, resourceKey, strategy)
         : string.Empty);
 }